爲什麼Crypt :: CBC(perl)和OpenSSL(ruby)之間的blowfish加密有什麼區別?perl和ruby之間的blowfish加密的區別
的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