Буквенно-цифровая хеш-функция в простом Javascript - PullRequest
0 голосов
/ 26 апреля 2018

Я ищу способ преобразовать данную строку в буквенно-цифровой хэш. Код будет выполняться на клиентской стороне и должен быть максимально полностью на vanilla JS или jQuery.

Однако существует ли также некриптографический хэш , т. Е. Просто строка буквенно-цифровых символов, которая не требует crypto и Promises? Мне нужны как криптографический, так и некриптографический хэш.

Второй хеш может быть обычной строкой буквенно-цифровых символов, скажем, длиной 10 символов. Это должно быть восстанавливаемым, то есть один и тот же хэш должен быть воссоздан всегда для данной строки. Было бы лучше, если бы этот второй хэш не генерировался асинхронно (то есть с использованием Promises). Я намерен использовать его в качестве ключа для boolean в window.localStorage (для многих различных строк).

Окончательные ответы:

1 Ответ

0 голосов
/ 26 апреля 2018

Современные браузеры обеспечивают реализацию криптографических алгоритмов через объект window.crypto. Вы можете посмотреть, что в данном случае означает «современный», по ссылке (внизу). Если вам подходит список поддерживаемых браузеров, вы можете достичь своей цели, например, так:

async function hash(target){
   var buffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(target));
   var chars = Array.prototype.map.call(new Uint8Array(buffer), ch => String.fromCharCode(ch)).join('');
   return btoa(chars);
};

Он хеширует вашу строку (в байтах своей кодировки utf-8) с помощью SHA-256, а затем преобразует результат в base64.

Обратите внимание, что если вам не нужен криптографически надежный хеш (вы не уточнили цель) - тогда могут быть лучшие (более быстрые) альтернативы.

...