gpt4 book ai didi

delphi - Delphi密码箱散列

转载 作者:行者123 更新时间:2023-12-03 19:31:03 27 4
gpt4 key购买 nike

我需要哈希一个字符串,最好是SHA512,尽管它可以是SHA256,SHA1,MD5或CRC32。

我已经下载了Lockbox 3,将TCryptographicLibrary和THash组件放在窗体上,将Hash属性设置为SHA-512,并使用以下代码生成测试结果:

procedure TForm1.Button1Click(Sender: TObject);
begin
Hash1.HashString('myhashtest');
Edit1.Text := Stream_To_AnsiString(Hash1.HashOutputValue);
end;


为了更好地说明问题,我继续使用在线哈希计算器,并且“ myhashtest”的MD5哈希为 ff91e22313f0a41b46719e7ee6f99451,但是将测试程序中的hash属性设置为MD5则会导致 ÿ‘â#ð¤Fqž~æù”Q,这显然是错误的。我已经使用其他哈希属性(包括我想要的SHA512)尝试了相同的测试,并且它们都返回垃圾。

我要去哪里错了?

最佳答案

THash.HashOutputValue是原始哈希字节流。看来Stream_To_AnsiString()仅将这些原始字节原样复制到AnsiString中,它不以任何方式对字节进行编码。您正在寻找的是原始字节的十六进制编码版本。我确实知道LockBox具有Stream_To_Base64()函数(如 中所示),但是我不知道它是否具有 Stream_To_Hex()类型的函数。如果没有,则可以轻松创建自己的示例,例如:

function Stream_To_Hex(Stream: TStream): AnsiString;
var
NumBytes, I: Integer;
B: Byte;
begin
NumBytes := Stream.Size - Stream.Position;
SetLength(Result, NumBytes * 2);
for I := 0 to NumBytes-1 do
begin
Stream.ReadBuffer(B, 1);
BinToHex(@B, @Result[(I*2)+1], 1);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Hash1.HashString('myhashtest');
Edit1.Text := Stream_To_Hex(Hash1.HashOutputValue);
end;

关于delphi - Delphi密码箱散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002453/

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