我是相当新的加密和解密,所以请原谅我缺乏这方面的知识。
我正在尝试解密 Ruby 中的字符串。该字符串是从使用 MCRYPT_RIJNDAEL_128 在 PHP 中加密的服务器读取的。我有在 PHP 中解密它的代码,我正在尝试将其转换为 Ruby。我需要这个来验证我正在使用 Rhodes(Ruby 中的移动应用程序框架)制作的移动应用程序。
这是PHP端解密的片段。
$key = "This is a test key";
$string2 = hex2bin($string); // The encrypted string
$iv = '1111F321414LOJL018473914DSADAS'; // Just given a random Initialisation vector for the example
$encrypted = mcrypt_cbc(MCRYPT_RIJNDAEL_128, $key, $string2, MCRYPT_DECRYPT, $iv);
function hex2bin($str) {
$bin = "";
$i = 0;
do {
$bin .= chr(hexdec($str{$i}.$str{($i + 1)}));
$i += 2;
} while ($i < strlen($str));
return $bin;
}
hex2bin 是一个将十六进制转换为二进制的函数。
到目前为止,这是我使用 Ruby 提供的 crpt:rijndael 库进行解密的失败尝试。
key = "This is a test key"
rd = Crypt::Rijndael.new(key, 128, 128)
string = @params['body'] // The encrypted string
encrypted_string = hex2bin(string)
decrypted_string = rd.decrypt_block(encrypted_string)
def hex2bin(str)
bin = ""
i = 0
begin
bin = bin + ((str[i]+str[i+1]).hex).chr
i = i+2
end while i<str.length
return bin
end
我收到一条错误消息,提示“应用程序错误:块必须为 16 个字节长”。我尝试添加代码以使其接受来自http://pastebin.com/m1rsJUXM的初始化向量。我仍然得到同样的错误。任何形式的帮助或指导将不胜感激。
问候,
灰