Je cours Windows Server 2k8 (peut-être que c'est la moitié du problème?) De toute façon, je reçois différentes valeurs de différents modules Blowfish dans diverses langues. Y en a-t-il un qui puisse être utilisé comme standard? Pour les exemples suivants, supposons que la clé est password
et le texte en clair 12345678
.Quel algorithme Blowfish est le plus 'correct'?
a. Le Online Encrypt Tool avec l'algorithme défini sur Blowfish
mode ECB
et Base64 Encode the output
vérifié donne 2mADZkZR0VM=
. J'ai utilisé ceci un point de référence, sage ou autre.
b. Le code suivant Perl utilise Crypt::ECB
et 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);
Ce sorties 2mADZkZR0VM=
avec PADDING_NONE (qui compare bien avec 'a.' Ci-dessus). Toutefois, lorsque le remplissage est défini sur PADDING_AUTO
, il génère 2mADZkZR0VOZ5o+S6D3OZw==
, ce qui est, à mon avis au moins, un bogue car le texte en texte brut comporte 8 caractères et n'a pas besoin de remplissage.
c. Si j'utilise Crypt::Blowfish
comme ci-dessous
#! 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;
je reçois 2mADZkZR0VM=
qui correspond 'a.' au dessus. Le problème avec ce module est que l'on doit segmenter les choses en morceaux de 8 octets pour l'encodage; il n'a pas de chunker de son propre chef.
d. Si j'utilise la source à http://linux.die.net/man/3/bf_ecb_encrypt (ce que j'ai fait pour un projet PHP récent), alors j'ai la même réponse que 'a.'. Je suis enclin à faire le plus confiance à ce code tel qu'il est utilisé dans SSLeay et OpenSSL.
e. Le BlowfishEx.EXE
dans le Blowfish: a Visual Basic version de la gestion de DI avec le remplissage PKCS#5
donne 2mADZkZR0VOZ5o+S6D3OZw==
qui est le même que les résultats de Crypt :: ECB avec PADDING_AUTO
. Avec Rembourrage réglé sur None
, j'obtiens 2mADZkZR0VM=
qui correspond à 'a.'
J'ai partiellement répondu à ma propre question en écrivant ceci: il me semble qu'il me suffit de modifier le code de DI Management pour le projet VB6. Et peut-être suggérer la même chose à l'auteur de Crypt :: ECB.
Mais la question demeure: existe-t-il une plateforme de référence blowfish digne de confiance?
http://www.schneier.com/blowfish.html – pmg
Assez juste, mais tous ces autres prétendent être des implémentations de l'algorithme de Schneier . – bugmagnet
En relation: http://www.schneierfacts.com/ – NullUserException