如何使用RNCryptor(AES128CBC)解密NSData? 我已經試着去了解文檔:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/draft-RNCryptor-Spec-v4.0.mdRNCryptor:在Swift中AES128CBC解密
編輯:
class Decription{
func AES128(message: String, key: String, iv: String){
let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let ivData: NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let data: NSData! = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
let cryptData = NSMutableData(length: Int(data.length) + kCCBlockSizeAES128)!
let keyLength = size_t(kCCKeySizeAES256)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(
operation,
algoritm,
options,
keyData.bytes,
keyLength,
ivData.bytes,
data.bytes, data.length,
cryptData.mutableBytes,
cryptData.length,
&numBytesEncrypted
)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
print("Decrypted Result = \(NSString(data: cryptData, encoding: NSUTF8StringEncoding))")
} else {
print("Error: \(cryptStatus)")
}
}
}
我改變的代碼片段@zaph掛鉤。你可以看到上面的結果。
NSString(data: cryptData, encoding: NSUTF8StringEncoding)
結果nil
。問題是什麼?
問題是,並非所有的數據和幾乎沒有加密的數據都可以編碼爲UTF-8或大多數編碼。如果你需要一個'String'作爲輸出使用Base64編碼。對於Base64編碼使用:'func base64EncodedStringWithOptions(_ options:NSDataBase64EncodingOptions) - > String'。 – zaph
結果必須是UTF-8,它是一個JSON字符串。 –
Base64由UTF-8字符組成,您將Base64編碼的字符串放在JSON中。另一個選擇是十六進制編碼加密數據,並將該字符串放入JSON中,但現在這種情況並不常見。 – zaph