一起使用Ruby和Node加密库

时间:2011-06-29 22:48:13

标签: ruby node.js encryption

我使用Ruby和EzCrypto库使用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:

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

secret.txt包含二进制而不是预期的UTF-8 / HEX。

答案 1 :(得分:0)

这是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无法使用Node: - (

我为Ruby编写了自己的密码包装器,我手动设置了IV。一旦修复完毕,其他一切都会感觉到。

我真的希望这可以帮助其他人。让我永远想弄清楚。