我无法使用节点加密数据并使用RNCryptor进行解密。我的理解是RNCryptor使用特殊的数据格式?
密码文本生成如下:
var crypto = require('crypto');
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8');
var text = "123|123123123123123";
var crypted = cipher.update(text,'utf8','base64');
crypted += cipher.final('base64');
我正在这样解密:
[RNDecryptor decryptData:plainText withPassword:password error:&error];
我该怎么做?当我尝试解密时,我得到一个空的NSData并且没有错误。
答案 0 :(得分:0)
是的,RNCryptor以自己的格式输出加密数据。如果您使用自己的加密代码构建此格式(并使用相同的加密参数),则可以将其传递给JNCryptor进行解密。
对于RNCryptor格式版本3,前34个字节如下:
然后是加密的密文。
然后最后32个字节保存密文的(SHA256)HMAC。
规范在这里:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md
答案 1 :(得分:0)
RNCryptor不仅仅是加密,而是一个完整的安全"堆栈"包括身份验证,密码密钥推导,版本控制和随机iv。由于您的加密只是加密部分,因此它将不兼容。
使用RNCryptor进行加密或更改为简单的解密方法。由于该问题具有commoncrypto标记,并且加密代码看起来可能是Swift(没有语言标记),因此只需考虑在Objective-C中使用Common Crypto进行解密。有关示例代码,请参阅SO answer。