Crypt :: CBC(perl)とOpenSSL(ruby)の間でブローイングの暗号化に違いがあるのはなぜですか?perlとrubyの間のブロッホ暗号の相違点
Perlの
use Crypt::CBC;
my $cipher = Crypt::CBC->new(-key => 'length32length32length32length32', -cipher => 'Blowfish');
my $ciphertext = $cipher->encrypt_hex('test');
# ciphertext is 53616c7465645f5f409c8b8eb353823c06d9b50537c92e19
ルビー
require "rubygems"
require "openssl"
cipher = OpenSSL::Cipher::Cipher.new("bf-cbc")
cipher.encrypt
cipher.key = "length32length32length32length32"
result = cipher.update("test") << cipher.final
ciphertext = result.unpack("H*").first
# ciphertext is 16f99115a09e0464
墓所:: CBCは、デフォルトでは出力にSalted__
を付加しているようです。あなたはこれらの間でそれほど異なることが起こっていることを説明できますか? OpenSSLをCrypt :: CBCと同じように動作させる方法はありますか?
Perlスクリプトは、実行するたびに異なる出力を生成します。 "Salted__"の後の出力の8バイトは、モジュールがテキストを暗号化するために使用した塩です(この情報が役立つかどうかわかりません)。 – mob
@mob:それは実際にそれを説明します。これは初期化ベクトルです。そうでなければ、与えられた入力は常に同じことを暗号化し、情報を公開します。 Joepestro、これはおそらく "なぜあなた自身の暗号プロトコルを発明しているのですか? – derobert