作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要哈希一个字符串,最好是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;
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/
我已经下载了这个组件并尝试安装,但是, 安装继续问太多问题:( 你怎么回答这些, BPL/DLL 输出目录? 包括 (.inc) 目录? Delphi XE DCU 输出目录? Delphi XE D
我是一名优秀的程序员,十分优秀!