J'utilise DLL externe dans les applications VCL pour calculer le hachage HMAC sha256, https://www.chilkatsoft.com/delphiDll.asp, j'ai besoin d'un moyen de le faire pour Android dans Delphi 10, je ne pouvais pas trouver tout qui fonctionne pour android dans delphi, ce le code pour le faire en utilisant DLLCalcul HMAC hachage dans Android en utilisant Delphi 10
function TForm2.HMAC(const s: pwidechar): string;
var
crypt: HCkCrypt2;
success: Boolean;
mac: PWideChar;
begin
crypt := CkCrypt2_Create();
// Any string argument automatically begins the 30-day trial.
success := CkCrypt2_UnlockComponent(crypt,'Anything for 30-day trial.');
if (success <> True) then
begin
Exit;
end;
// The output will be Hex, so set the EncodingMode:
CkCrypt2_putEncodingMode(crypt,'hex');
// Set the hash algorithm:
// Choices are: md5, sha-1, sha256, sha384, sha512, md2, haval
CkCrypt2_putHashAlgorithm(crypt,'sha256');
// Set the HMAC key:
CkCrypt2_SetHmacKeyEncoded(crypt,'my key','ascii');
mac := CkCrypt2__hmacStringENC(crypt,s);
Result := (mac);
CkCrypt2_Dispose(crypt);
end;
MISE à JOUR
j'ai trouvé un morceau de code pour obtenir le HMAC SHA256..but je ne pouvais pas comprendre comment cela fonctionne, comme le code ci-dessus?
var
Hash: TIdHMACSHA256 ;
HashValue: TBytes;
begin
SetCurrentDir(ExtractFilePath(ParamStr(0)));
Hash := TIdHMACSHA256 .Create;
try
Hash.Key := TEncoding.ASCII.GetBytes('devaee2');
HashValue := Hash.HashValue(TFile.ReadAllBytes('menu.xml'));
// HashValue is an empty array, why?
Tag := Length(HashValue);
TFile.WriteAllBytes('menu.xml.hash', HashValue);
finally
FreeAndNil(Hash);
end;
end;
Indy fonctionne généralement très bien sur Android 6. L'utilisation d'OpenSSL par Indy ne fonctionne pas sur Android 6. Cependant, les classes de hachage et de HMAC d'Indy ne dépendent pas directement d'OpenSSL, mais peuvent utiliser OpenSSL. quand il est disponible L'unité 'IdFIPS' d'Indy a un tas de pointeurs de fonctions que vous pouvez pointer vers n'importe quelle API de hachage que vous voulez (l'unité' IdSSLOpenSSLHeaders' pointe vers les fonctions OpenSSL) pour les hachages que Indy n'implémente pas nativement (certains hashes, comme MD5 et SHA1, sont implémentés nativement). –
Si l'on regarde la classe 'TIdHMAC', il semblerait qu'elle ignore certaines implémentations de hachage natives, en s'appuyant sur des bibliothèques externes. Je vais devoir regarder ça. –
On dirait que seul 'TIdHMACSHA1' a été affecté. Je l'ai mis à jour pour utiliser maintenant l'implémentation SHA-1 native d'Indy lorsqu'une bibliothèque de hachage externe n'est pas disponible. 'TIdHMACMD5' utilisait déjà l'implémentation MD5 native d'Indy. –