¿Por qué existe una diferencia en el cifrado blowfish entre Crypt :: CBC (perl) y OpenSSL (ruby)?Diferencia en cifrado blowfish entre perl y ruby
Perl
use Crypt::CBC;
my $cipher = Crypt::CBC->new(-key => 'length32length32length32length32', -cipher => 'Blowfish');
my $ciphertext = $cipher->encrypt_hex('test');
# ciphertext is 53616c7465645f5f409c8b8eb353823c06d9b50537c92e19
Rubí
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 parece estar anteponiendo Salted__
a la salida por defecto. ¿Puedes explicar qué está pasando que es tan diferente entre estos? ¿Hay alguna manera de hacer que OpenSSL se comporte de forma similar a Crypt :: CBC?
El script de Perl genera resultados diferentes cada vez que se ejecuta. Los 8 bytes en la salida después de "Salted__" son la sal que el módulo usó para encriptar el texto (no sé si esa información es útil). – mob
@mob: Eso realmente lo explica. Es el vector de inicialización. De lo contrario, una entrada dada siempre encripta a la misma cosa, que revela información. Joepestro, esto probablemente cae bajo "¿por qué estás inventando tu propio protocolo de cifrado" – derobert