我使用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:
非常感谢任何帮助。
答案 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。一旦修复完毕,其他一切都会感觉到。
我真的希望这可以帮助其他人。让我永远想弄清楚。