私はかなり新しい暗号化と復号化ですので、このテーマに関する知識が不足していることをお許しください。
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は、16進数を2進数に変換する関数です。
これまでのところ、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からの初期化ベクトルを受け入れるようにコードを追加してみました。それでも同じエラーが発生します。どんな種類の助けや指示も大歓迎です。
よろしく、
灰