我如何在 Indy 中使用 Md5?
How do I use Md5 in Indy?
我需要计算MD5。我搜索的每个地方都告诉我使用 Indy,所以我有:
hasher := TIdHashMessageDigest5.Create;
现在我需要在读取流时多次调用一个函数来更新 MD5。我怎样才能在 Indy 中做到这一点?我只看到像 HashStream 这样的方法对整个流进行哈希处理。
另外,在我计算完哈希后,我需要将它转换为十六进制。我看到 Indy 中曾经有 AsHex 函数,但现在不存在了。
那么如何将 HashStream 等函数的结果转换为十六进制字符串?
TIdHashMessageDigest...
(和TIdHashSHA...
)目前没有public
直播流哈希方法(TIdHashCRC...
、TIdHashAdler32
和TIdHashElf
做)。但是,TIdHashMessageDigest...
确实有 protected
直播方法,因此您可以使用访问器 class 访问它们,例如:
type
TIdMessageDigest5Access = class(TIdMessageDigest5)
end:
var
hasher: TIdMessageDigest5:
ctx: TIdHashIntCtx;
hash: TIdBytes;
hex: string;
begin
hasher := TIdHashMessageDigest5.Create;
ctx := TIdMessageDigest5Access(hasher).InitHash;
...
// call this as many times as needed...
TIdMessageDigest5Access(hasher).UpdateHash(ctx, bytes);
...
hash := TIdMessageDigest5Access(hasher).FinalHash(ctx);
hex := TIdMessageDigest5Access(hasher).HashToHex(hash);
...
hasher.Free;
end;
还有各种publicHash...AsHex()
方法,比如HashStreamAsHex()
.
我需要计算MD5。我搜索的每个地方都告诉我使用 Indy,所以我有:
hasher := TIdHashMessageDigest5.Create;
现在我需要在读取流时多次调用一个函数来更新 MD5。我怎样才能在 Indy 中做到这一点?我只看到像 HashStream 这样的方法对整个流进行哈希处理。
另外,在我计算完哈希后,我需要将它转换为十六进制。我看到 Indy 中曾经有 AsHex 函数,但现在不存在了。 那么如何将 HashStream 等函数的结果转换为十六进制字符串?
TIdHashMessageDigest...
(和TIdHashSHA...
)目前没有public
直播流哈希方法(TIdHashCRC...
、TIdHashAdler32
和TIdHashElf
做)。但是,TIdHashMessageDigest...
确实有 protected
直播方法,因此您可以使用访问器 class 访问它们,例如:
type
TIdMessageDigest5Access = class(TIdMessageDigest5)
end:
var
hasher: TIdMessageDigest5:
ctx: TIdHashIntCtx;
hash: TIdBytes;
hex: string;
begin
hasher := TIdHashMessageDigest5.Create;
ctx := TIdMessageDigest5Access(hasher).InitHash;
...
// call this as many times as needed...
TIdMessageDigest5Access(hasher).UpdateHash(ctx, bytes);
...
hash := TIdMessageDigest5Access(hasher).FinalHash(ctx);
hex := TIdMessageDigest5Access(hasher).HashToHex(hash);
...
hasher.Free;
end;
还有各种publicHash...AsHex()
方法,比如HashStreamAsHex()
.