如何在 EvaporateJS 的 cryptoMd5Method 中使用 nodejs 加密

How to use nodejs crypto in cryptoMd5Method of EvaporateJS

我在一个使用 webpack 的 React 项目中使用 EvaporateJS。

documentation中所述,我使用了以下内容:

(我不想使用 aws-sdk,因为 btw 正常工作的包大小)

cryptoMd5Method: function (data) { 
 return crypto.createHash('md5').update(data).digest('base64'); 
}

但是'data'是ArrayBuffer的类型。所以我尝试将其转换为字符串。

cryptoMd5Method: function (data) { 
    var enc = new TextDecoder();
    var dataString = enc.decode(data);
    var computed = crypto.createHash('md5').update(dataString).digest('base64');
    return computed ;
}

但这并不能正确计算摘要。


那么,这个问题的解决方案应该是什么(考虑到 nodejs 加密选项)?

另外,如何只导入 AWS.util.crypto 模块而不引用整个 aws-sdk ?这将帮助我保持捆绑小。

整个 aws-sdk 确实很大,但是对于 front-end(浏览器),您可以构建一个较小的工件,只包含您需要的东西。 按照 amazon docs - Building the SDK for Browsers.

中的说明进行操作

关于将 ArrayBuffer 转换为字符串以将其传递给散列算法的 update() 方法,请参阅:Converting between strings and ArrayBuffers

1) 导入浏览器兼容包:

import MD5 from 'js-md5'; import { sha256 as SHA256 } from 'js-sha256';

2) 声明函数:

const md5 = (x) => { const o = MD5.create(); o.update(x); return o.base64(); }; const sha256 = (x) => { const o = SHA256.create(); o.update(x); return o.hex(); };

3) 配置中的用法:

... computeContentMd5: true, cryptoMd5Method: (_) => md5(_), cryptoHexEncodedHash256: (_) => sha256(_), ...