一起使用Ruby和Nodeencryption库

我已经使用Ruby和EzCrypto库使用aes-128-cbcencryption来encryptionstring。

这是我在Ruby中的encryption代码:

 require 'rubygems' require 'ezcrypto' @pwd = 'hello'; @salt = 'salt' key = EzCrypto::Key.with_password @pwd,@salt, :algorithm=>"aes-128-cbc" File.open('key.txt','w') do |file| file.write(key.to_s) end File.open('secret.txt','w') do |file| file.write(key.encrypt("hello")) end 

现在我想用Node解密这个string。 我什么也没有回来。 我一定在这里做错了什么 以下是我的节点代码。

 var crypto = require('crypto'); var fs = require('fs'); var secret = fs.readFileSync('secret.txt', 'binary'); var key = fs.readFileSync('key.txt', 'base64'); var decipher = crypto.createDecipher('aes-128-cbc', key); var string = decipher.update(secret, 'binary', 'utf8'); string += decipher.final('utf8'); console.log("STRING: ", string) 

其中返回: STRING:

任何帮助将非常感激。

secret.txt包含二进制代替预期的UTF-8 / HEX。

原来这是Ruby实现OpenSSL的一个问题。 如果你深入挖掘Ruby的源代码,你会发现:

[https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_cipher.c#L210][1]

Ruby始终将iv或初始化向量设置为“OpenSSL for Ruby rulez!” 恕我直言,这是荒谬的。 开箱即用Ruby的OpenSSLencryption将无法使用其他语言。

含义EzCrypto将无法与节点:-(

我写了我自己的ruby密码包装,我手动设置IV。 一旦被修复,其他一切都会感觉到。

我真的希望这可以帮助别人。 让我永远把它弄清楚。