我已經使用JavaCCCrypt填充選項似乎並沒有影響到解密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(text.getBytes());
加密(請注意,在Java中,PKCS5Padding實際使用AES link時PKCS7Padding)的字符串
而且我的解密內部代碼是:
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
0,
key.bytes,
kCCBlockSizeAES128,
iv.bytes,
[encrypted bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
叫這樣的:
let decryptedData = decryptor.AES128DecryptWithKeyString(key, encryptedString: encodedString) //this does the CCCrypt stuff
let string:NSString = NSString(data: decryptedData, encoding: NSUTF8StringEncoding) ?? ""
let data = NSData(base64EncodedString: string as String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
所以,即使它使用PKCS5Padding加密,我的解密工作正常,儘管沒有填充選項。此外,如果我將0
選項更改爲kCCOptionPKCS7Padding
,它也可以解密。
這是預期的行爲?填充選項僅與kCCEncrypt相關,而不與kCCDecrypt相關?
此外,如果我們改變了Java加密
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
和盤手動有效載荷與零個字節,那麼它仍能正常解密不管我是否使用0
作爲一個選項或kCCOptionPKCS7Padding
我正在查看NSData並將其轉換爲UIImage,並正確顯示。 –
當我沒有指定kCCOptionPKCS7Padding時,我在NSData上看到了額外的填充字節,但是我很困惑,爲什麼在將UIImage'let data = NSData(base64EncodedString:string as String,選項:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)' 填充字節消失。 (即使沒有IgnoreUnknownCharacters選項,它們也會消失) –
由於數據無效(包含填充字符),操作未定義。 – zaph