我正在为Android和IOS开发App
对于android我正在使用“AES / CBC / NoPadding”Cipher和IOS使用CommonCrypto与Android相同的algo / mode / padding
我正在使用公钥初始化密码,以便在两个平台上获得相同的结果
在Android中,我使用cipher.update(inpBuf, inpOffset, inpLen, outBuf, outOffset)
进行加密/解密,我想在IOS中这样做。
我在IOS中尝试了 CCCryptorUpdate ,但结果数组是[0,0,0 ...... 0]
请指导我,哪里出了问题?
答案 0 :(得分:1)
AES是一种分组密码,用于加密16字节块中的数据。当调用update()
时,所有16字节的块都将被加密,并且任何过多的字节将等待,直到下一个update()
调用。当没有更多数据需要加密时,您使用doFinal()
完成加密,刷新最后一个块+并应用所需的任何填充。你为什么使用NoPadding?您是否确保自己的数据与AES的块大小匹配?
在IOS中解密时,您可以使用相应的CCCryptorUpdate()
和CCCryptorFinal()
。只有在CCCryptorFinal()
之后才能获得完整的解密消息。 CCCryptorUpdate()
可能会也可能不会返回数据,具体取决于缓冲区中的数量等等。