在Swift开发中,实现数据加密通常涉及使用内置的加密框架,如CommonCrypto。以下是一个简单的示例,展示了如何使用CommonCrypto库对字符串进行AES加密和解密。
首先,确保你的项目中已经导入了CommonCrypto库。如果你使用的是CocoaPods,可以在Podfile中添加pod 'CommonCrypto',然后运行pod install。
接下来,你可以创建一个加密工具类,如下所示:
import Foundation
import CommonCrypto
class EncryptionHelper {
// 加密方法
static func encrypt(data: Data, key: String) -> Data? {
guard let keyData = key.data(using: .utf8) else { return nil }
var encryptedData = Data(count: data.count + kCCBlockSizeAES128)
var encryptedDataLength: Int = 0
let status = keyData.withUnsafeBytes { keyBytes in
data.withUnsafeBytes { dataBytes in
CCCrypt(CCOperation(kCCEncrypt),
CCAlgorithm(kCCAlgorithmAES),
CCOptions(kCCOptionPKCS7Padding),
keyBytes.baseAddress, keyData.count,
nil,
dataBytes.baseAddress, data.count,
encryptedData.mutableBytes, encryptedData.count,
&encryptedDataLength)
}
}
if status == kCCSuccess {
encryptedData.count = encryptedDataLength
return encryptedData
} else {
return nil
}
}
// 解密方法
static func decrypt(data: Data, key: String) -> Data? {
guard let keyData = key.data(using: .utf8) else { return nil }
var decryptedData = Data(count: data.count + kCCBlockSizeAES128)
var decryptedDataLength: Int = 0
let status = keyData.withUnsafeBytes { keyBytes in
data.withUnsafeBytes { dataBytes in
CCCrypt(CCOperation(kCCDecrypt),
CCAlgorithm(kCCAlgorithmAES),
CCOptions(kCCOptionPKCS7Padding),
keyBytes.baseAddress, keyData.count,
nil,
dataBytes.baseAddress, data.count,
decryptedData.mutableBytes, decryptedData.count,
&decryptedDataLength)
}
}
if status == kCCSuccess {
decryptedData.count = decryptedDataLength
return decryptedData
} else {
return nil
}
}
}
使用这个工具类,你可以轻松地对字符串进行加密和解密:
let originalString = "Hello, World!"
let key = "your-secret-key"
if let originalData = originalString.data(using: .utf8) {
// 加密
if let encryptedData = EncryptionHelper.encrypt(data: originalData, key: key) {
print("Encrypted data: \(encryptedData)")
// 解密
if let decryptedData = EncryptionHelper.decrypt(data: encryptedData, key: key) {
if let decryptedString = String(data: decryptedData, encoding: .utf8) {
print("Decrypted string: \(decryptedString)")
}
}
}
}
请注意,这个示例使用了AES加密算法和PKCS7填充。在实际应用中,你需要根据你的需求选择合适的加密算法和填充方式。同时,确保你的密钥长度符合所选算法的要求。在这个例子中,我们使用了AES-128位加密,所以密钥长度应该是16个字符。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。