0
我试图用128密钥解密消息与下面的代码。这是字符串的扩展名:aes 128消息解密 - 斯威夫特,iOS
func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? {
if let keyData = key.dataUsingEncoding(NSUTF8StringEncoding),
data = NSData(base64EncodedString: self, options: .IgnoreUnknownCharacters),
cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128) {
let keyLength = size_t(kCCKeySizeAES128)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(options)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
keyData.bytes, keyLength,
nil,
data.bytes, data.length,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
let unencryptedMessage = String(data: cryptData, encoding:NSUTF8StringEncoding)
return unencryptedMessage
}
else {
return nil
}
}
return nil
}
对于输入向量(iv),我使用零值。 有crypData存在,但我不能正确读取此,unencryptedMessage也是零。在线工具通知数据不正确,但是在后端工作正常。
键值和消息值是base64Url。
用法:
let decryptedMessage = message.aesDecrypt(keyTodecrypt, iv: nil)
雨燕2.3
AES加密没有标准设置或格式。除非您可以准确描述加密器如何构建消息,否则无法对其进行解密。你有密码吗? –
您注意到密钥是Base64编码的(至少我假设这就是“base64Url”的含义)。但是你将它解码为utf-8。这可能是你的主要问题,尽管肯定会有更多。 –
@zaph我的意思是说输入值是正确的,后端能够用java库解密它。这是ECB模式,而不是CBC。 –