如何在EvaporateJS的cryptoMd5中使用Node.js加密

时间:2019-06-25 08:58:49

标签: javascript node.js webpack aws-sdk evaporate.js

我正在使用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 crypto选项)应该是什么?

或者,如何仅导入AWS.util.crypto模块而不引用整个aws-sdk呢?这将帮助我使捆绑包保持较小。

2 个答案:

答案 0 :(得分:1)

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(_), ...

答案 1 :(得分:0)

整个aws-sdk确实很大,但是对于前端(浏览器),您可以构建一个较小的工件,其中仅包含您需要的东西。 按照amazon docs - Building the SDK for Browsers上的说明进行操作。

有关将ArrayBuffer转换为字符串以将其传递给哈希算法的update()方法的信息,请参见:Converting between strings and ArrayBuffers