Le hachage SHA1 dans Delphi XE
Je suis dans le processus de mise en œuvre de signatures numériques XML. Je commence avec des petits pas, donc maintenant je veux résoudre le problème de hachage SHA-1.
Il ya beaucoup de questions à ce sujet dans:
- Digitially Signe Touche avec boîte postale
- Bibliothèque de cryptage pour Delphi
- Convertir ce php signature numérique à Delphi
- Delphi: est-il une version de boîtes aux lettres pour Delphi XE
- Delphi 2010 bibliothèques de Cryptographie
...et probablement plus. Cependant, je suis l'aide de Delphi XE. Jusqu'à présent, j'ai essayé de boîte postale 2 (à la fois le Songbeamer et Sourceforge versions), Serrure de Boîte de 3, DCPCrypto2 et quelques autres (Hachages est une unité facile à utiliser qui utilise Windows crypto fonctions)
J'ai préparé un petit banc d'essai qui me donne le suivant:
LockBox2
FAILED: 1 ('abc')
Got: '9f04f41a848514162050e3d68c1a7abb441dc2b5'
Expected: 'a9993e364706816aba3e25717850c26c9cd0d89d'
FAILED: 2 ('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq')
Got: '51d7d8769ac72c409c5b0e3f69c60adc9a039014'
Expected: '84983e441c3bd26ebaae4aa1f95129e5e54670f1'
LockBox3
FAILED: 1 ('abc')
Got: '9f04f41a848514162050e3d68c1a7abb441dc2b5'
Expected: 'a9993e364706816aba3e25717850c26c9cd0d89d'
FAILED: 2 ('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq')
Got: '51d7d8769ac72c409c5b0e3f69c60adc9a039014'
Expected: '84983e441c3bd26ebaae4aa1f95129e5e54670f1'
DCPCrypto2
FAILED: 1 ('abc')
Got: '9f04f41a848514162050e3d68c1a7abb441dc2b5'
Expected: 'a9993e364706816aba3e25717850c26c9cd0d89d'
FAILED: 2 ('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq')
Got: '51d7d8769ac72c409c5b0e3f69c60adc9a039014'
Expected: '84983e441c3bd26ebaae4aa1f95129e5e54670f1'
Hachages
Test 1 passes
Test 2 passes
Avez-vous réussi à compiler le mentionné bibliothèques sous Delphi XE et de leur faire donner les valeurs appropriées? Je suis particulièrement intéressé par DCPCrypt2 SelfTest
procédure.
Modifier: j'ai ajouté cette réponse avec le fixe code source. Merci à vous tous pour votre aide, il est le plus apprécié.
+1 pour la vue d'ensemble de bibliothèques. Notez que le hachage est conçu pour des données binaires, pas pour cordes (leur représentation binaire dépend de leur codage). J'ai écrit à une conclusion similaire, tandis que écrit sur le hachage MD5. (Lire les réponses: c'est la conclusion de la réponse aussi <g>).
La prochaine fois post un peu de code!
P - je vais mettre à jour cette réponse à mon code.
Mayevski 'EldoS Corp - Mec, je suis juste évaluation de la SecureBlackBox toolkit, et je suis terrassé. Vous n'avez pas un gentil, un coupon de réduction de la graisse autour de la pose que vous pouvez me donner? 😉
OriginalL'auteur Leonardo Herrera | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Leonardo, je pense que qui votre problème est la
UNICODE
quand tu utilise une fonction de hachage unestring
vous êtes de passage à un tableau (buffer) d'octets. ainsi, lorsque vous passez leabc
chaîne dans Delphi XE, votre sont le hachage d'un tampon comme ce61 00 62 00 63 00
(représentation Hexadécimale)vérifier cet exemple d'application qui utilise le Windows crypto fonctions de la
Jwscl library
(JEDI Windows Code de Sécurité Lib)ce retour
abc
AnsiStringA9993E364706816ABA3E25717850C26C9CD0D89D
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
AnsiString84983E441C3BD26EBAAE4AA1F95129E5E54670F1 pour
abc
unicode9F04F41A848514162050E3D68C1A7ABB441DC2B5
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
Unicode51D7D8769AC72C409C5B0E3F69C60ADC9A039014
Bon conseil. Je ne savais pas qu'on pouvait utiliser la crypto libs dans Windows, à l'aide de JWSCL wrappers.
Ce code source peut être compilé avec Delphi 7?
OriginalL'auteur RRUZ
Mon Cygwin d'invite de commande me dit qu'il est en effet d'Unicode qui est déroutant vous:
Je pense que vous êtes d'être sarcastique, mais il montre l'utilité de Cygwin pour tester ces sortes d'hypothèses - md5sum, sha1sum, et openssl pour beaucoup plus.
Non, je ne suis pas sarcastique à tous! J'ai accepté RRUZ de réponse parce que c'est plus complet, mais c'est une excellente réponse. Merci!
Je n'aurais pas dit que c'était plus complet, c'est juste plus de commentaires, ce qui n'est pas nécessairement le meilleur. De toute façon, je ne suis pas en train de frapper RRUZ, mais je suis avec Barry, tous les bons développeurs doivent apprendre à utiliser de puissants outils de ligne de commande afin qu'ils puissent obtenir des tâches comme ça fait plus efficacement.
Je suis entièrement d'accord re: différents outils. J'ai adoré cette réponse, il était vraiment clair, et de fait, j'ai lu ceci avant de lire RRUZ et eu la réponse tout de suite. Si je pouvais l'accepter deux réponses pour une question que je voudrais! (RRUZ réponse n'est pas juste plus détaillée.)
OriginalL'auteur Barry Kelly
Pourrait la valeur attendue pour une chaîne ANSI et le hash vous obtenez est une chaîne unicode?
OriginalL'auteur Thorsten Engler
Ok, donc c'était Unicode questions. Juste au cas où vous voulez savoir, c'est mon Part1.pas de source. Vous avez besoin d'un formulaire avec un mémo et un bouton. Nécessite DCPCrypt2, LockBox2, LockBox3 et le hachage de l'unité.
OriginalL'auteur Leonardo Herrera