如何在 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(_),
...
我在一个使用 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(_),
...