参考:
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
}
}
网友评论