2016-08-11 1 views
1

J'ai le code suivant écrit en Delphi.sha1 somme de contrôle dans delphi

with TIdHashMessageDigest5.Create do begin 
    st2.Position := 0; 
    Digest := HashValue(st2); 
    SetLength(Hash, 16); 
    Move(Digest, Hash[1], 16); 
    Free; 
end; 

Je dois convertir cela pour utiliser le hachage SHA1. Je ne pouvais pas trouver le type SHA1 dans la bibliothèque. Quelqu'un peut-il aider? J'ai cherché de l'aide sur internet mais je n'en ai pas trouvé.

+1

SHA1 est pas sécurisé –

Répondre

0

Vous semblez en utilisant Indy 9, qui ne supporte pas SHA1. SHA1 (et quelques autres hachages, y compris plusieurs autres SHA) a été ajouté dans Indy 10. L'interface pour TIdHash a également été réécrite dans Indy 10. Parmi d'autres changements, la méthode HashValue() a été remplacée par les nouvelles méthodes Hash...() et Hash...AsHex() (HashString(AsHex), HashStream(AsHex), HashBytes(AsHex)), par exemple:

uses 
    ..., IdHash, IdHashMessageDigest; 

var 
    Hash: TIdBytes; 
begin 
    with TIdHashMessageDigest5.Create do 
    try 
    st2.Position := 0; 
    Hash := HashStream(st2); 
    finally 
    Free; 
    end; 
    // use Hash as needed... 
end;  

uses 
    ..., IdHash, IdHashSHA; 

var 
    Hash: TIdBytes; 
begin 
    with TIdHashSHA1.Create do 
    try 
    st2.Position := 0; 
    Hash := HashStream(st2); 
    finally 
    Free; 
    end; 
    // use Hash as needed... 
end;  
+0

Salut Remy, Merci pour votre temps. Je vais l'utiliser et voir comment cela fonctionne pour moi. J'utilise Delphi 2005. Pouvez-vous suggérer d'où puis-je chercher IdGlobal.pas comme celui que j'ai généré beaucoup d'erreurs "Undeclared Identifier"? – MKK

+0

@MKK tels que? il ne suffit pas d'obtenir un nouveau IdGlobal.pas par lui-même, vous devez obtenir une version plus récente de toute la bibliothèque Indy dans son ensemble. –

3

Voir ici:

https://sergworks.wordpress.com/2014/10/25/high-performance-hash-library/

SHA1 hashing in Delphi XE

https://sourceforge.net/projects/sha1implementat/

http://www.colorfultyping.com/generating-a-sha-1-checksum-for-a-given-class-type/

BTW, vous ne mentionnaient pas votre version Delphi. Si vous utilisez une version moderne (XE partir), je suppose que les bibliothèques standard devraient soutenir SHA-1, MD5, etc.

Vous pouvez le faire comme ceci:

uses IdHashSHA; 

function SHA1FromString(const AString: string): string; 
var 
    SHA1: TIdHashSHA1; 
begin 
    SHA1 := TIdHashSHA1.Create; 
    try 
    Result := SHA1.HashStringAsHex(AString); 
    finally 
    SHA1.Free; 
    end; 
end; 
+0

réponses ne contenant que des liens hors site ne sont pas acceptables ici. –