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の紺碧の仕様に従ってどのようになりますか?

PD:この回答Windows Azure Blob Storageサービスから返されたInvalidMd5エラーを解決するにはどうすればよいですか?.NETで解決します。

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

しかし、どのようにデルファイに翻訳するのかわからない。

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バージョンでは、次の2つの手順で実行しました。idmd5.AsHex(idmd5.HashValue(fs))使用できる可能性のある古いDelphiバージョンのコード例を次に示します。 。 http://delphi.about.com/od/objectpascalide/a/delphi-md5-hash.htm

于 2012-04-20T21:07:13.443 に答える
1

Delphiはまったくわかりませんが、エラーメッセージには、MD5ハッシュをbase64でエンコードする必要があると表示されていますが、16進エンコードを使用しているようです。

于 2012-04-21T03:59:52.013 に答える