Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDF文件中的Base64哈希在C#和Delphi之间不同_C#_Delphi_Hash_Base64_Sha256 - Fatal编程技术网

PDF文件中的Base64哈希在C#和Delphi之间不同

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 =

我正在尝试从PDF生成哈希。这个散列应该是SHA256和Base64。 我使用的是一个简单的PDF,其中有一行内容:Hello World

使用下面的C代码,我得到了结果: Gv5AR2YOxUVOjx+QFakM56Wj7CSqeZWiaVqczra/iBk=

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文件,这是单向操作。