2012-04-20 56 views
2

我尝试为我上传到Azure的文件设置MD5哈希值。我得到这个错误:如何在delphi中为azure blob存储生成MD5?

(400, 'HTTP/1.1 400 The MD5 value specified in the request is a invalid. MD5 value must be 128 bits and base64 encoded.', $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); 

现在,如何做到这一点,根据德尔福XE2蔚蓝的规格?

PD:这个答案How to resolve an InvalidMd5 error returned from the Windows Azure Blob Storage service?解决它为.NET:

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

但不知道如何向平移,德尔福..

+0

如果您要将数据转储到文件,然后使用其中一个免费的MD5计算器,您是否得到相同的答案?我会在尝试排除计算机故障之前从此开始,因为计算可能没有任何问题。即你假设Azure不喜欢你的MD5,但也许Azure不喜欢你的文件。 – 2012-04-20 17:48:22

+0

我使用osx md5命令行对同一文件进行了相同的结果测试。 – mamcx 2012-04-20 19:04:08

回答

1

我根本不知道德尔福,但错误消息说你的MD5哈希应该是base64编码的,但它看起来是使用十六进制编码。