Tại sao có sự khác biệt trong mã hóa blowfish giữa Crypt :: CBC (perl) và OpenSSL (ruby)?Sự khác biệt trong mã hóa blowfish giữa perl và ruby
Perl
use Crypt::CBC;
my $cipher = Crypt::CBC->new(-key => 'length32length32length32length32', -cipher => 'Blowfish');
my $ciphertext = $cipher->encrypt_hex('test');
# ciphertext is 53616c7465645f5f409c8b8eb353823c06d9b50537c92e19
của Ruby
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
Crypt :: CBC dường như được thêm vào trước Salted__
để đầu ra theo mặc định. Bạn có thể giải thích những gì đang xảy ra mà là rất khác nhau giữa những? Có cách nào để làm cho OpenSSL hoạt động theo cách tương tự như Crypt :: CBC không?
Kịch bản Perl tạo ra đầu ra khác nhau mỗi khi nó được chạy. 8 byte trong đầu ra sau "Salted__" là muối mà mô-đun được sử dụng để mã hóa văn bản (Tôi không biết liệu thông tin đó có hữu ích hay không). – mob
@mob: Điều đó thực sự giải thích nó. Đó là vectơ khởi tạo. Nếu không, một đầu vào cho trước luôn mã hóa cùng một điều, tiết lộ thông tin. Joepestro, điều này có thể rơi vào "tại sao bạn phát minh ra giao thức mật mã của riêng bạn" – derobert