本文整理自网络,侵删。
unit HMAC;
interface
uses System.SysUtils, EncdDecd, IdHMAC, IdSSLOpenSSL, IdHash;
type THMACUtils = class public class function HMAC(aKey, aMessage: RawByteString): TBytes; class function HMAC_HexStr(aKey, aMessage: RawByteString): RawByteString; class function HMAC_Base64(aKey, aMessage: RawByteString): RawByteString; end;
implementation
class function THMACUtils.HMAC(aKey, aMessage: RawByteString): TBytes;var _HMAC: T;begin if not IdSSLOpenSSL.LoadOpenSSLLibrary then Exit; _HMAC:= T.Create; try _HMAC.Key := BytesOf(aKey); Result:= _HMAC.HashValue(BytesOf(aMessage)); finally _HMAC.Free; end;end;
class function THMACUtils.HMAC_HexStr(aKey, aMessage: RawByteString): RawByteString;var I: Byte;begin Result:= '0x'; for I in HMAC(aKey, aMessage) do Result:= Result + IntToHex(I, 2);end;
class function THMACUtils.HMAC_Base64(aKey, aMessage: RawByteString): RawByteString;var _HMAC: TBytes;begin _HMAC:= HMAC(aKey, aMessage); Result:= EncodeBase64(_HMAC, Length(_HMAC));end;
end.
下面是调用的例子:
program HMACSample;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils, HMAC, IdHMACSHA1, IdHashMessageDigest;
begin try Write('HMAC_SHA1("key", "message")'#9#9'= '); Writeln(THMACUtils.HMAC_HexStr('key', 'message' )); Writeln;
Write('HMAC_SHA256("key", "message")'#9#9'= '); Writeln(THMACUtils.HMAC_HexStr('key', 'message' )); Writeln;
Write('HMAC_SHA1_Base64("key", "message")'#9'= '); Writeln(THMACUtils.HMAC_Base64('key', 'message' )); Writeln;
Write('HMAC_SHA256_Base64("key", "message")'#9'= '); Writeln(THMACUtils.HMAC_Base64('key', 'message' ));
Readln;
except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end;end.
相关阅读 >>
Delphi的webbrowser改造,对网页中alter等对话框的改造方法
更多相关阅读请进入《Delphi》频道 >>