如何在Node.js中将Google Cloud Storage的Base64 MD5哈希转为标准字符串
解决Google Cloud Storage MD5哈希转十六进制字符串的问题
嘿,我明白你遇到的问题了——你拿到的是GCS返回的Base64编码MD5,想转成十六进制格式的哈希字符串,但之前用toString("ascii")得到了乱码,这是因为你选错了编码格式!
问题根源
GCS返回的md5Hash是二进制MD5值的Base64编码,解码后是16字节的二进制数据。如果你直接转成ASCII字符串,很多二进制字节对应的是不可打印字符,就会出现像I9O{bCI."z{?@m这样的乱码。而你想要的十六进制字符串,是把每个二进制字节转换成两位十六进制字符的结果。
修正后的代码
只需要把toString("ascii")改成toString("hex")就行,完整代码如下:
async function getAllmd5() { const { Storage } = require('@google-cloud/storage'); const storage = new Storage(); const bucket = storage.bucket('example'); const [files] = await bucket.getFiles(); for (const file of files) { // 解码Base64,再转成十六进制字符串 const hexMd5 = Buffer.from(file.metadata.md5Hash, 'base64').toString('hex'); console.log(`文件 ${file.name} 的MD5哈希:${hexMd5}`); } }
验证示例
拿你提到的示例Base64值H0m5T/tigkNJLqL6+z9A7Q==来测试:
const base64Md5 = 'H0m5T/tigkNJLqL6+z9A7Q=='; const hexMd5 = Buffer.from(base64Md5, 'base64').toString('hex'); console.log(hexMd5); // 输出: b1f4f9a523e36fd969f4573e25af4540
完全符合你想要的结果!
内容的提问来源于stack exchange,提问作者Expto
相关产品推荐
相关产品推荐

