我是相當新的加密和解密,所以請原諒我在主題方面的知識不足。使用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()的函數,並且似乎已經擺脫了錯誤。然而,解密的字符串仍然不是我所期望的。我會根據你的建議嘗試改變。 感謝您的幫助。乾杯。 –