Как использовать криптографию nodejs в cryptoMd5Method EvaporateJS
Я использую EvaporateJS в реактивном проекте, который использует веб-пакет.
Как описано в документации, я использовал следующее:
(Я не хочу использовать aws-sdk из-за размера пакета, который работает правильно)
cryptoMd5Method: function (data) {
return crypto.createHash('md5').update(data).digest('base64');
}
Но "данные" - это тип 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
? Это поможет мне сохранить маленький пакет.
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(_),
...
Весь aws-sdk действительно большой, однако для фронт-энда (браузеров) вы можете создать меньший артефакт, включающий только то, что вам нужно. Следуйте инструкциям в документации Amazon - Построение SDK для браузеров.
Для преобразования ArrayBuffer в строку, чтобы передать его update()
Метод алгоритма хеширования, см.: Преобразование между строками и ArrayBuffers.