PDF文件中的Base64哈希在C#和Delphi之间不同
我正在尝试从PDF生成哈希。这个散列应该是SHA256和Base64。 我使用的是一个简单的PDF,其中有一行内容:Hello World 使用下面的C代码,我得到了结果: Gv5AR2YOxUVOjx+QFakM56Wj7CSqeZWiaVqczra/iBk=PDF文件中的Base64哈希在C#和Delphi之间不同,c#,delphi,hash,base64,sha256,C#,Delphi,Hash,Base64,Sha256,我正在尝试从PDF生成哈希。这个散列应该是SHA256和Base64。 我使用的是一个简单的PDF,其中有一行内容:Hello World 使用下面的C代码,我得到了结果: Gv5AR2YOxUVOjx+QFakM56Wj7CSqeZWiaVqczra/iBk= string digest; using (SHA256Managed sha = new SHA256Managed()) { byte[] hash = sha.ComputeHash(pdf); digest =
string digest;
using (SHA256Managed sha = new SHA256Managed())
{
byte[] hash = sha.ComputeHash(pdf);
digest = Convert.ToBase64String(hash);
}
// uses IdCoderMIME, IdHashSHA, IdGlobal;
var
oHash: TIdHashSHA1;
oFileStream: TFileStream;
begin
oHash := TIdHashSHA1.Create;
oFileStream := TFileStream.Create(edtPDFPath.Text, fmOpenRead);
try
result := TIdEncoderMIME.EncodeBytes(oHash.HashStream(oFileStream, 0, oFileStream.Size));
finally
Freeandnil(oFileStream);
oHash.Free
end;
然后,使用Delphi,通过下面的代码,我得到:
wPUoG1guk2hQ5TxS5lUmaMLk83E=
string digest;
using (SHA256Managed sha = new SHA256Managed())
{
byte[] hash = sha.ComputeHash(pdf);
digest = Convert.ToBase64String(hash);
}
// uses IdCoderMIME, IdHashSHA, IdGlobal;
var
oHash: TIdHashSHA1;
oFileStream: TFileStream;
begin
oHash := TIdHashSHA1.Create;
oFileStream := TFileStream.Create(edtPDFPath.Text, fmOpenRead);
try
result := TIdEncoderMIME.EncodeBytes(oHash.HashStream(oFileStream, 0, oFileStream.Size));
finally
Freeandnil(oFileStream);
oHash.Free
end;
我需要用Delphi散列这个文件,但我不知道我的结果是否正确
有人知道另一种获得SHA256 Base64哈希结果的方法吗?使用以下代码,您可以获得与C#相同的结果
// uses System.Hash, System.NetEncoding;
Result := TNetEncoding.Base64.EncodeBytesToString(THashSHA2.GetHashBytes(oFileStream, THashSHA2.TSHA2Version.SHA256));
SHA1不是SHA256<代码>TIDHASHA1实现SHA1<代码>SHA256管理实现SHA256。它们不一样。请注意,SHA1已经被弃用了15年。相关:谢谢@Eugenek。现在我正试图解密散列字符串并再次将其保存到PDF文件中,但我找不到一种方法。我已经尝试过类似以下的方法:
var-stream:TBytesStream;begin stream:=TBytesStream.Create(TNetEncoding.Base64.DecodeStringToBytes(base64HashString));尝试stream.SaveToFile(文件名);最后流。免费;结束代码>但生成的文件已损坏,包含无效字符。我不确定您试图实现什么,您无法从其哈希恢复PDF文件,这是单向操作。