【发布时间】:2012-08-19 14:58:29
【问题描述】:
我正在尝试找出 Node.js Crypto 库以及如何根据我的情况正确使用它。
我的目标是:
键入十六进制字符串 3132333435363738313233343536373831323334353637383132333435363738
十六进制字符串 46303030303030303030303030303030 中的文本
十六进制字符串 70ab7387a6a94098510bf0a6d972aabe 中的密文
我正在通过 AES 256 的 c 实现以及http://www.hanewin.net/encrypt/aes/aes-test.htm 的网站对此进行测试
这是我必须要做的,它没有按照我期望的方式工作。我最好的猜测是密码函数的输入和输出类型不正确。唯一有效的是utf8,如果我使用十六进制它会失败并出现v8错误。关于我应该转换或更改以使其正常工作的任何想法。
var keytext = "3132333435363738313233343536373831323334353637383132333435363738";
var key = new Buffer(keytext, 'hex');
var crypto = require("crypto")
var cipher = crypto.createCipher('aes-256-cbc',key,'hex');
var decipher = crypto.createDecipher('aes-256-cbc',key,'hex');
var text = "46303030303030303030303030303030";
var buff = new Buffer(text, 'hex');
console.log(buff)
var crypted = cipher.update(buff,'hex','hex')
在这个例子中,crypted 的输出是 8cfdcda0a4ea07795945541e4d8c7e35,这不是我所期望的。
【问题讨论】:
-
您的目标意味着没有静脉注射。你真的想要那个吗?我还强烈建议添加 MAC。
-
我怀疑加密库会自动添加随机 IV 和填充,从而产生 3 块(48 字节)的输出。在大多数情况下,这比无填充 ECB 更合适。
-
我打算使用静脉注射,为了简化问题,我省略了它。我不确定你所说的 MAC 是什么意思?
-
完整性检查,确保没有人篡改您的密文。没有它,您将面临许多攻击,例如填充预言。
-
查看 NodeJS 文档,我只看到一个有两个参数的 createCipher 工厂方法。你用的是什么版本&上面的代码有没有测试过?
标签: javascript node.js encryption aes node-crypto