使用SecKeyWrapperencryption16个字节的UTF8(ccStatus == -4304)
我使用Apple文档中的CryptoExercise示例代码中的Apple SecKeyWrapper
类与AES128进行一些对称encryption。 出于某种原因,当我encryption1-15个字符或17个字符时,它会正确encryption和解密。 有16个字符,我可以encryption,但在解密时,会在CCCryptorFinal
调用ccStatus == -4304
之后引发exception,这表示解码错误。 (去搞清楚。)
据我所知,AES128使用每个encryption块16个字节,所以我得到这样的印象,即错误与明文长度落在块边界上有关。 有没有人遇到这个问题使用CommonCryptor
或SecKeyWrapper
?
以下几行…
// We don't want to toss padding on if we don't need to if (*pkcs7 != kCCOptionECBMode) { if ((plainTextBufferSize % kChosenCipherBlockSize) == 0) { *pkcs7 = 0x0000; } else { *pkcs7 = kCCOptionPKCS7Padding; } }
…是我的问题的罪魁祸首。 为了解决这个问题,我只好把它们评论出来。
据我所知,encryption过程不是在encryption方面的填充,但仍然期待在解密方面的填充,导致解密过程失败(这通常是我所经历的)。
对于我来说,总是使用kCCOptionPKCS7Padding
进行encryption/解密,对于我来说,对于满足length % 16 == 0
string和那些不是。 而且,这又是对CryptoExercise
示例代码的SecKeyWrapper
类的修改。 不知道这是如何影响你使用CommonCrypto
与家庭卷的包装。
我也使用CommonCrypto类遇到过这个问题,但是对于长度为16的倍数的任何string。
我的解决scheme是彻底的黑客,因为我还没有find真正的解决scheme。
我填充我的string的末尾有一个空格,如果它是16的倍数。它适用于我的特殊情况,因为数据上的额外空间不会影响另一方的数据接收,但我怀疑它会工作其他人的情况。
希望有人更聪明,可以指出我们正确的方向,以真正的解决scheme。
- 在iOS 7中,AES解密在iOS 8/9中具有不同的行为
- 我想在目标c中使用无填充的CFBencryption来创buildAES 128
- 如何发送NSData作为密钥和四CCCrypt
- 如何对swift XCODE上的string进行AES 128encryption并将其作为POST发送给服务器?
- AES在iOS(Obj-C)和Android(Java)中获得了不同的结果
- AES快速encryption
- AES / cbc / pkcs5padding encription IOS
- 在iOS中创build随机的128位AESencryption密钥
- 我怎样才能解密在iOS的XML文件与AES / CBC / PKCS5Padding标准,在Android的文件已被解密,所有的关键像盐,IV