2014-09-04 126 views
4

我在使用节点加密数据和使用RNCryptor解密时遇到了问题。我的理解是RNCryptor使用特殊的数据格式?如何在node.js中加密并使用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

是的,RNCryptor以自己的格式输出加密数据。如果您在自己的加密代码中构建此格式(并使用相同的加密参数),则可以将其传递给JNCryptor进行解密。

对于RNCryptor格式版本3中,第一34个字节如下:

  • 字节[0]是版本(3)。
  • byte [1]定义是否使用密码或密钥(1代表密码,0代表密钥)。
  • 字节[2-9]携带加密盐。
  • bytes [10-17]携带HMAC盐。
  • bytes [18-33]携带IV。

然后是加密的密文。

然后最后32个字节保存密文的(SHA256)HMAC。

该规范是在这里:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md

0

RNCryptor不仅仅是加密,更是一个完整的安全“堆栈”,包括身份验证,密码密钥导出,版本控制和随机IV。由于您的加密只是加密部分,它将不兼容。

使用RNCryptor进行加密或更改为简单的解密方法。由于该问题有一个commoncrypto标签,加密代码看起来像是Swift(没有语言标签),只需考虑在Objective-C中使用Common Crypto进行解密即可。示例代码见SO answer