resueltos - ¿Cómo hago una cadena con Delphi?
programas hechos en lenguaje ensamblador (8)
El proyecto Spring For Delphi - http://www.spring4d.org - tiene implementación para un número de hashes SHAxxx, hash MD5, y también número de funciones CRC
¿Cómo puedo hacer un hash MD5 de una cadena con Delphi?
Esta es una modificación de la respuesta de devstopfix que fue aceptada.
En la versión actual de Indy puedes hacer hash de cadenas y flujos más fácilmente. Ejemplo:
function MD5String(str: String): String;
begin
with TIdHashMessageDigest5.Create do
try
Result := HashStringAsHex(str);
finally
Free;
end;
end;
Use HashString
, HashStringAsHex
, HashBytes
, HashBytesAsHex
, HashStream
, HashStreamAsHex
. La ventaja es que también puede especificar una codificación de texto
Si desea un resumen de MD5 y tiene instalados los componentes de Indy , puede hacer esto:
uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;
with TIdHashMessageDigest5.Create do
try
Result := TIdHash128.AsHex(HashValue(''Hello, world''));
finally
Free;
end;
Los algoritmos más populares son compatibles con el paquete de criptografía Delphi :
- Haval
- MD4, MD5
- RipeMD-128, RipeMD-160
- SHA-1, SHA-256, SHA-384, SHA-512,
- Tigre
La actualización de DCPCrypt
ahora es mantenida por Warren Postma y la fuente se puede encontrar here .
Si desea una cadena hash MD5 como hexadecimal y tiene instalado Delphi XE 1 , para que tenga los componentes Indy 10 .5.7 puede hacer esto:
usa IdGlobal, IdHash, IdHashMessageDigest;
class function getMd5HashString(value: string): string;
var
hashMessageDigest5 : TIdHashMessageDigest5;
begin
hashMessageDigest5 := nil;
try
hashMessageDigest5 := TIdHashMessageDigest5.Create;
Result := IdGlobal.IndyLowerCase ( hashMessageDigest5.HashStringAsHex ( value ) );
finally
hashMessageDigest5.Free;
end;
end;
Si todo lo que quiere hacer es usar un diccionario, y no está buscando seguridad, entonces:
En Delphi 2009 y superior, se pueden crear valores hash para cadenas con
BobJenkinsHash
(Value, Length(Value) * SizeOf(Value), 0)
donde Value es una cadena.
También puede usar la API de WindowsCrypto con Delphi:
Hay una unidad allí que envuelve todo el CryptoAPI. También puede usar Lockbox, que ahora es de código abierto.
Al final puedes soportar casi cualquier algoritmo Hash con Delphi. El ejemplo de Indy es probablemente el más cercano que obtendrás nativamente en Delphi ya que Indy está incluido con la mayoría de las versiones de Delphi. Para el resto necesitará usar una biblioteca o escribir más código para acceder a CryptoAPI o implementarlo usted mismo.
Usualmente uso DCPCrypt2 ( Paquete de criptografía Delphi ) de David Barton ( City in the Sky ).
También contiene los siguientes algoritmos de cifrado:
- Blowfish
- Elenco 128
- Cast 256
- DES, 3DES
- Hielo, Hielo Fino, Hielo2
- IDEA
- Marte
- Misty1
- RC2, RC4, RC5, RC6
- Rijndael (el nuevo AES)
- Serpiente
- Té
- Dos peces
La actualización de DCPCrypt
ahora es mantenida por Warren Postma y la fuente se puede encontrar here .
TurboPower Lockbox es compatible con:
- MD-5,
- SHA-1 y
- toda la familia SHA-2, incluidos los hashes SHA-512/224 y SHA-512/256 publicados recientemente.