美文网首页
Swift里Data的压缩zip、unzip, AES、MD5加

Swift里Data的压缩zip、unzip, AES、MD5加

作者: 独孤流 | 来源:发表于2023-06-29 01:39 被阅读0次

参考:

NSData+zlib
CryptoSwift
SwiftyRSA
swift 5.0 RSA+AES加密插件CryptoSwift以及SwiftyRSA的使用

使用NSData+zlib进行zip、unzip操作
使用CryptoSwift进行md5、AES、SHA
使用SwiftyRSA进行RSA


import Foundation
import GoogleUtilities
import CryptoSwift
import SwiftyRSA

class DataCryptTool {
    static func test() {
        let data = "123456".data(using: .utf8)
        let data1 = data?.gzip
        let data2 = data1?.gUnZip
        let data3 = data?.AESCrypt(key: "1234567890123456", padding: .pkcs5Padding, isEncode: true)
        let data4 = data3?.AESCrypt(key: "1234567890123456", padding: .pkcs5Padding, isEncode: false)
        print(data?.bString ?? "")
        print(data1?.bString ?? "")
        print(data2?.bString ?? "")
        print(data3?.bString ?? "")
        print(data4?.bString ?? "")
    }
}
enum AESPaddingType {
    case pkcs7Padding
    case pkcs5Padding
    
    var aesVal: CryptoSwift.Padding {
        switch self {
        case .pkcs5Padding:
            return .pkcs5
        case .pkcs7Padding:
            return .pkcs7
        }
    }
}
extension Data {
    var gzip: Data? {
        do {
            let result =  try NSData.gul_data(byGzippingData: self)
            return result
        } catch let error {
            print(error)
        }
        return nil
    }
    var gUnZip: Data? {
        do {
            let result =  try NSData.gul_data(byInflatingGzippedData: self)
            return result
        } catch let error {
            print(error)
        }
        return nil
    }
    // AES/ECB/Padding7
    // AES/ECB/Padding5
    func AESCrypt(key: String, padding: AESPaddingType, isEncode: Bool) -> Data? {
        do {
            let setting = try AES(key: key.bytes, blockMode: ECB(), padding: padding.aesVal)
            let result = try isEncode ? setting.encrypt(self.bytes) : setting.decrypt(self.bytes)
            return result.data
        } catch let error {
            print(error)
        }
        return nil
    }
    public typealias RSAPadding = SecPadding
    static func RSACrypt(val: String, key: String, padding: RSAPadding, isEncode: Bool) -> String? {
        guard let keyData = key.data(using: .utf8) else {
            return nil
        }
        do {
            if isEncode {
                // 公钥加密
                let publicKey = try PublicKey(base64Encoded: key)
                let message = try ClearMessage(string: val, using: .utf8)
                let data = try message.encrypted(with: publicKey, padding: padding)
                return data.base64String
            } else {
                // 私钥解密
                let privateKey = try PrivateKey(base64Encoded: key)
                let message = try EncryptedMessage(base64Encoded: val)
                let data = try message.decrypted(with: privateKey, padding: padding)
                return data.base64String
            }
        } catch let error {
            print(error)
        }
        return nil
    }
}


相关文章

  • CentOS文件解压缩

    安装 zip / unzip:yum -y install zip unzip 压缩:zip -r html.zi...

  • Linux命令:zip 和 unzip

    zip 和 unzip zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。 unzip 用于解压缩z...

  • linux常用命令

    **打包压缩** 安装zip yum install -y unzip zip; 压缩:zip -r 1.zip ...

  • 解压命令

    .zip压缩:zip firename.zip dirname解压缩:unzip firename.zip .g...

  • centos安装zip

    ZIP的安装 centos 系统: yum install zip unzip 即可使用 解压: unzip 压缩...

  • linux常用归档和压缩命令

    linux常见归档和压缩格式: zip:解压:unzip FileName.zip压缩:zip FileName....

  • linux压缩打包

    zip/unzip 将文件目录压缩或者解压,默认生产.zip压缩包。 zip [选项] 压缩后文件名 需要压缩到文...

  • Linux日记本_08:压缩文件的解压缩

    unzip命令进行.zip文件的解压缩 1.排除不需要解压缩的文件 unzip file.zip -x file3...

  • linux命令安装

    安装压缩命令 yum install -y unzip zip

  • 压缩文件的使用

    1. 压缩文件的分类: ZIP:扩展名为.zip,用于压缩/解压缩的程序是zip/unzip; GZIP:扩展名为...

网友评论

      本文标题:Swift里Data的压缩zip、unzip, AES、MD5加

      本文链接:https://www.haomeiwen.com/subject/orjaydtx.html