我从Issue using CCCrypt (CommonCrypt) in Swift
获取了此代码(并对其进行了修改)我搞砸了一会儿,但无法解密功能。
func AESEncrypt(_ text: String, _ keyString: String) -> String {
let keyData: NSData! = (keyString as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let keyBytes = UnsafeMutableRawPointer(mutating: keyData.bytes)
let data: NSData! = (text as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let dataLength = size_t(data.length)
let dataBytes = UnsafeMutableRawPointer(mutating: data.bytes)
let cryptData = NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)
let cryptPointer = UnsafeMutableRawPointer(cryptData!.mutableBytes)
let cryptLength = size_t(cryptData!.length)
let keyLength = size_t(kCCKeySizeAES256)
let operation: CCOperation = UInt32(kCCEncrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionPKCS7Padding + kCCOptionECBMode)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
keyBytes, keyLength,
nil,
dataBytes, dataLength,
cryptPointer, cryptLength,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData!.length = Int(numBytesEncrypted)
let base64cryptString = cryptData!.base64EncodedString(options: .lineLength64Characters)
return base64cryptString
} else {
return "error"
}
}
func AESDecrypt(_ text: String, _ keyString: String) -> String {
let data: NSData! = (text as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let keyData: NSData! = (keyString as NSString).data(using: String.Encoding.utf8.rawValue) as NSData!
let keyBytes = UnsafeMutableRawPointer(mutating: keyData.bytes)
let dataLength = size_t(data.length)
let dataBytes = UnsafeMutableRawPointer(mutating: data.bytes)
let cryptData = NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)
let cryptPointer = UnsafeMutableRawPointer(cryptData!.mutableBytes)
let cryptLength = size_t(cryptData!.length)
let keyLength = size_t(kCCKeySizeAES256)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionPKCS7Padding + kCCOptionECBMode)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
keyBytes, keyLength,
nil,
dataBytes, dataLength,
cryptPointer, cryptLength,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData!.length = Int(numBytesEncrypted)
let base64cryptString = cryptData!.base64EncodedString(options: .endLineWithLineFeed)
return base64cryptString
} else {
return "error"
}
}
AESDecrypt()给出一个看似是base64encoded的字符串,但我不能让它返回String值。
答案 0 :(得分:0)
我将您的问题理解为“如何解码base64encoded String”。
这可以这样做:
let decodedData = Data(base64Encoded: base64Encoded)!
let decodedString = String(data: decodedData, encoding: .utf8)!