2014-09-04 127 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