我在使用节点加密数据和使用 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 并且没有错误。

最佳答案

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

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

  • byte[0] 是版本 (3)。
  • byte[1] 定义是使用密码还是 key (1 表示密码,0 表示 key )。
  • bytes[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

    关于commoncrypto - 如何在 node.js 中加密并使用 RNCryptor 解密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25656501/

    10-09 12:51