2017-05-04 264 views
0

我尝试在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 
+1

将'crypto.createCipher'更改为'crypto.createCipheriv'并传递一个空IV(''“'')。另外,您可能想要禁用填充。 –

+0

**切勿使用[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)方案完成。 –

回答

0

谢谢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

+1

请注意,如果要加密的数据不总是128字节的块大小的倍数,则需要填充。 ECB模式也不安全,请参阅[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滚动到企鹅。 取而代之的是将CBC模式与随机IV一起使用,只是将加密数据与IV一起用于解密,并不需要保密。 – zaph