如何检查已上载到 Amazon S3 的对象的完整性?

上次更新日期:2021 年 8 月 10 日

我想将对象上载到 Amazon Simple Storage Service (Amazon S3) 存储桶。另外,我想验证已上传对象的完整性。该如何操作?

简短描述

请按照以下步骤,使用 Content-MD5 标头验证上载对象的完整性:

注意:当您使用 Content-MD5 标头时,Amazon S3 会根据提供的 Content-MD5 值检查对象。如果值不匹配,则会收到错误消息。

1.    计算对象的 Content-MD5 值。

2.    通过在对象上载期间将 Content-MD5 值作为请求标头传递来验证上载对象的完整性。

解决方法

计算对象的 Content-MD5 值

Windows 操作系统

重要提示:Microsoft 文件校验和完整性验证器 (FCIV) 实用程序是一个不受支持的命令行实用程序,用于计算文件的 MD5 加密哈希值。FCIV 在 Windows 2000、Windows XP 和 Windows Server 2003 上运行。

如果您使用的是 Windows 操作系统,您可以使用 Microsoft PowerShell 实用程序Get-FileHash cmdlet 来计算 MD5 摘要,如下所示:

Get-FileHash \path\to\file -algorithm MD5 | Format-List

注意:Get-FileHash cmdlet 可用于 Microsoft PowerShell 实用程序 4.0 版及更高版本。

以下是示例输出:

Algorithm : MD5
Hash      : C9A5A6878D97B48CC965C1E41859F034
Path      : \path\to\file

然后,将 base64 编码应用于计算得出的 MD5 摘要,以获取所需的 Content-MD5 值:

$hashString ='C9A5A6878D97B48CC965C1E41859F034'
$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
$ContentMD5 = [System.Convert]::ToBase64String($hashByteArray)
Echo $ContentMD5
yaWmh42XtIzJZcHkGFnwNA==

在此示例中,Echo $ContentMD5 的输出 ("yaWmh42XtIzJZcHkGFnwNA==") 是所需的 Content-MD5 值。

Linux 操作系统

如果您使用的是 Linux 操作系统,请运行以下 OpenSSL 命令以获取文件的 Content-MD5 值:

openssl md5 -binary PATH/TO/FILE | base64

验证上载对象的完整性

当您使用 PutObject 将对象上载到 Amazon S3 时,请将 Content-MD5 值作为请求标头传递。Amazon S3 根据提供的 Content-MD5 值检查对象。如果值不匹配,则会收到错误消息。

Content-MD5 请求标头也可以与 S3 UploadPart API 一起使用。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?