在node.js上使用aes-ecb加密二进制数据
我尝试在node.js上执行加密,但是很糟糕,我无法获得与在线网站相同的结果。在node.js上使用aes-ecb加密二进制数据
我想用二进制密钥加密一些二进制数据。我使用nodejs site上的教程,但是我的参考数据集有不同的结果。 我引用的数据集进行验证使用Java代码,用C语言代码和两个在线网站: http://aes.online-domain-tools.com/和https://www.hanewin.net/encrypt/aes/aes-test.htm
你有一个想法如何的方式,这些网站同样的加密? 我想它可以是填充?
在此先感谢。 弗朗索瓦
我引用的数据集:
key=8CBDEC62EB4DCA778F842B02503011B2
src=0002123401010100000000000000c631
encrypted=3edde3f1368328a1a37cf596bc8d4a7c
我的代码:
var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex')
var src = new Buffer('0002123401010100000000000000c631', 'hex')
cipher = crypto.createCipher("aes-128-ecb", key)
result = cipher.update(src).toString('hex');
result += cipher.final().toString('hex');
"result : " + result
输出:
result : 4da42b57b99320067979086700651050e972f1febd1d506e5c90d3b5d3bc9424
谢谢Artjom B.
我张贴hereu的nDer固定的代码:
var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex')
var src = new Buffer('0002123401010100000000000000c631', 'hex')
cipher = crypto.createCipheriv("aes-128-ecb", key, '')
cipher.setAutoPadding(false)
result = cipher.update(src).toString('hex');
result += cipher.final().toString('hex');
"result : " + result
要解密,做同样的:
var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex')
var encrypted = new Buffer('3edde3f1368328a1a37cf596bc8d4a7c', 'hex')
decipher = crypto.createDecipheriv("aes-128-ecb", key, '')
decipher.setAutoPadding(false)
result = decipher.update(encrypted).toString('hex');
result += decipher.final().toString('hex');
"result : " + result
谢谢,我感到由衷的感激。 Regards,François
请注意,如果要加密的数据不总是128字节的块大小的倍数,则需要填充。 ECB模式也不安全,请参阅[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滚动到企鹅。 取而代之的是将CBC模式与随机IV一起使用,只是将加密数据与IV一起用于解密,并不需要保密。 – zaph
将'crypto.createCipher'更改为'crypto.createCipheriv'并传递一个空IV(''“'')。另外,您可能想要禁用填充。 –
**切勿使用[ECB模式](https://crypto.stackexchange.com/q/14487/13022)**。它是确定性的,因此不具有语义安全性。您至少应该使用[CBC](https://crypto.stackexchange.com/q/22260/13022)或[CTR](https://crypto.stackexchange.com/a/2378/)这样的随机模式。 13022)。最好对密文进行身份验证,以便像[padding oracle attack](https://crypto.stackexchange.com/q/18185/13022)这样的攻击是不可能的。这可以通过验证模式(如GCM或EAX)或[加密 - 然后MAC](https://crypto.stackexchange.com/q/202/13022)方案完成。 –