Я довольно новое шифрование и дешифрование, поэтому, пожалуйста, извините, что я не знаю этого предмета.
Я пытаюсь расшифровать строку в Ruby. Строка читается с сервера, где она была зашифрована в PHP с использованием MCRYPT_RIJNDAEL_128. У меня есть код для расшифровки в 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 - это функция, которая преобразует шестнадцатеричный код в двоичный.
Пока здесь моя неудачная попытка выполнить расшифровку с использованием библиотеки crpt: rijndael, предоставленной Ruby.
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. Я все еще получаю ту же ошибку. Любая помощь или направление будет принята с благодарностью.
С уважением,
Ash