我是相当新的加密和解密,所以请原谅我在主题方面的知识不足。使用Ruby解密PHP加密字符串
我想解密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的初始化向量。我仍然得到同样的错误。任何形式的帮助或方向将不胜感激。
问候,
灰
嘿,谢谢你的回答。这个Ruby库(crypt)只有一种模式,那就是CBC。我尝试使用CBC模块中名为decrypt_string()而不是decrypt_block()的函数,并且似乎已经摆脱了错误。然而,解密的字符串仍然不是我所期望的。我会根据你的建议尝试改变。 感谢您的帮助。干杯。 –