2

我尝试为要上传到 azure 的文件设置 MD5 哈希。我收到此错误:

(400, 'HTTP/1.1 400 请求中指定的 MD5 值无效。MD5 值必须为 128 位和 base64 编码。', $7230400)

这就是我为文件执行 md5 的方式:

function MD5(const fileName : string) : string;
var
 idmd5 : TIdHashMessageDigest5;
 fs : TFileStream;
begin
 idmd5 := TIdHashMessageDigest5.Create;
 fs := TFileStream.Create(fileName, fmOpenRead OR fmShareDenyWrite) ;
 try
   result := idmd5.HashStreamAsHex(fs) ;
 finally
   fs.Free;
   idmd5.Free;
 end;
end;

......


Headers.Values['Content-MD5'] :=  MD5(LocalFile);

现在,如何根据 delphi xe2 上的 azure 规范执行此操作?

PD:这个答案如何解决从 Windows Azure Blob 存储服务返回的 InvalidMd5 错误?为.NET解决它:

MD5 md5 = new MD5CryptoServiceProvider();
byte[] blockHash = md5.ComputeHash(buff);
string convertedHash = Convert.ToBase64String(blockHash, 0, 16);

但不知道如何翻译到delphi ..

4

3 回答 3

2

您应该注意 XE2 中的 Azure 代码中的错误(此链接还显示了如何创建和格式化 MD5 哈希值):

使用 PutBlock 的 EIPHTTPProtocolExceptionPeer 异常,字节数组全部设置为零

编辑:

相关代码:

Hasher:=TIdHashMessageDigest5.Create;
MD5:=Data.Cloud.CloudAPI.EncodeBytes64(Hasher.HashBytes(Content));
Hasher.Free;
于 2012-04-21T01:33:38.607 回答
1

我不知道 delphi XE2 的 HashStreamAsHex() 函数,但在较旧的 Delphi 版本中,您分两步完成: . http://delphi.about.com/od/objectpascalide/a/delphi-md5-hash.htm

于 2012-04-20T21:07:13.443 回答
1

我根本不了解 Delphi,但错误消息说您的 MD5 哈希应该是 base64 编码,但看起来您使用的是十六进制编码。

于 2012-04-21T03:59:52.013 回答