gpt4 book ai didi

delphi - 如何使用 Delphi XE8 使用 SHA-3/256 对字符串进行哈希处理?

转载 作者:行者123 更新时间:2023-12-03 15:28:34 28 4
gpt4 key购买 nike

我正在尝试使用 Wolfgang Ehrardt 的 CRC/Hash 库对字符串进行哈希处理,并且我正在尝试使用 SHA3/256 算法。我写了这个程序:

procedure TForm1.Button1Click(Sender: TObject);
var
Context : THashContext;
Digest: TSHA3_256Digest;
buf: TBytes;
s: string;
begin
buf := TEncoding.UTF8.GetBytes('0123456789012345');
SHA3_256Full(Digest, buf, SizeOF(buf));
s:=HexStr(@Digest, SizeOf(Digest)); //HexStr is in mem_utils unit from the same CRC/Hash library

memo1.lines.clear;
memo1.Lines.add(s);
end;

生成的哈希值是 b64f67d4a6fe871afc5c42e3128b5e3b6943c475bab1a138667c0213e1f9a6bb,但它与通过 SHA-3/256 工具在 http://emn178.github.io/online-tools/sha3_256.html 获得的结果不同,其中相同的字符串给出 4e058e17199441d 69589d3c775face0c4949af7f4f011317efce2fc22606c428

另一方面,如果我尝试对空白字符串进行哈希处理,则结果是 a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a,这是正确的。

所以问题是:我的代码是否犯了任何错误?

最佳答案

因为buf是一个动态数组变量,实现为指针,所以SizeOf(buf)是指针的大小。 4 或 8,具体取决于您的目标。我认为这根本不是你的意图。您打算传递字节数组的长度。所以,替换

SizeOf(buf)

Length(buf)

这个程序

{$APPTYPE CONSOLE}

uses
SysUtils,
mem_util, hash, sha3_256;

var
Digest: TSHA3_256Digest;
buf: TBytes;

begin
buf := TEncoding.UTF8.GetBytes('0123456789012345');
SHA3_256Full(Digest, buf, Length(buf));
Writeln(HexStr(@Digest, SizeOf(Digest)));
end.

输出

4e058e17199441d69589d3c775face0c4949af7f4f011317efce2fc22606c428

关于delphi - 如何使用 Delphi XE8 使用 SHA-3/256 对字符串进行哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703499/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com