结合使用Ruby和节点加密库

结合使用Ruby和节点加密库,ruby,node.js,encryption,Ruby,Node.js,Encryption,我得到了一个使用Ruby和库使用aes-128-cbc加密的字符串 以下是我在Ruby中的加密代码: 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

我得到了一个使用Ruby和库使用aes-128-cbc加密的字符串

以下是我在Ruby中的加密代码:

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解密这个字符串。我什么也没得到。我一定是做错了什么。下面是我的节点代码

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的OpenSSL加密永远不会与其他语言一起工作

这意味着EzCrypto无法与节点一起工作:-(

我为Ruby编写了我自己的密码包装器,我手动设置了IV。一旦修复了,其他的一切都会恢复正常


我真的希望这对其他人有所帮助。我花了很长时间才弄明白。

无论我如何对待编码。我仍然有同样的问题。你会如何解决这种情况?是的,加上诸如“oops.此代码将盐误认为IV”之类的注释,这是一个非常值得信赖的包装器。