Как использовать криптографию 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.

Другие вопросы по тегам