Я использую Windows Server 2k8 (может, в этом и заключается половина проблемы?) В любом случае, я получаю разные значения из разных модулей Blowfish на разных языках. Есть ли такой, на который можно положиться в качестве стандарта?
В следующих примерах предположим, что ключ password
и текст 12345678
.
а. Инструмент Online Encrypt с установленным алгоритмом Blowfish
mode ECB
и Base64 Encode the output
дает 2mADZkZR0VM=
. Я использовал это в качестве ориентира, мудрого или нет.
б. В следующем коде Perl используются Crypt::ECB
и MIME::Base64
use MIME::Base64;
use Crypt::ECB;
$crypt = Crypt::ECB->new;
$crypt->padding(PADDING_NONE);
$crypt->cipher('Blowfish') || die $crypt->errstring;
$crypt->key('password');
$enc = $crypt->encrypt("12345678");
print encode_base64($enc);
Это выводит 2mADZkZR0VM=
с PADDING_NONE (который хорошо сравнивается с 'a.' Выше). Однако, когда для padding установлено значение PADDING_AUTO
, выдается 2mADZkZR0VOZ5o+S6D3OZw==
, что, по моему мнению, по крайней мере, ошибка, так как открытый текст имеет длину 8 символов и не нуждается в заполнении.
с. Если я использую Crypt::Blowfish
, как показано ниже
#! c:\perl\bin
use Crypt::Blowfish;
use MIME::Base64;
my $key;
my $plaintext;
$key = "password";
$plaintext = "12345678";
my $cipher = new Crypt::Blowfish $key;
my $ciphertext = $cipher->encrypt($plaintext);
my $encoded = encode_base64( $ciphertext );
print $encoded;
тогда я получаю 2mADZkZR0VM=
, что соответствует 'a.' выше. Проблема с этим модулем состоит в том, что для кодирования нужно разбить 8-битные блоки; у него нет своего чанка.
* * Д тысячу тридцать один. Если я использую источник в
http://linux.die.net/man/3/bf_ecb_encrypt (что я сделал для недавнего проекта PHP ext), тогда я получу тот же ответ, что и «a.». Я склонен доверять этому коду больше всего, так как он используется в SSLeay и OpenSSL.
е. BlowfishEx.EXE
в DI Management Blowfish: версия Visual Basic с заполнением PKCS#5
дает 2mADZkZR0VOZ5o+S6D3OZw==
, что совпадает с результатами Crypt :: ECB с PADDING_AUTO
. Если для Padding установлено значение None
, я получу 2mADZkZR0VM=
, что соответствует 'a.'
Я частично ответил на свой вопрос, написав это: похоже, мне просто нужно изменить код DI Management для проекта VB6. И, возможно, предложить то же самое автору Crypt :: ECB.
Но остается вопрос: есть ли надежная эталонная платформа blowfish?