SubtleCrypto: метод digest()
Базовая реализация Широко доступна
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод digest() интерфейса SubtleCrypto генерирует дайджест заданных данных. Дайджест — это короткое значение фиксированной длины, полученное из входных данных переменной длины. Криптографические дайджесты должны обладать свойством стойкости к коллизиям, что означает сложность получения двух различных входных данных с одинаковым значением дайджеста.
Он принимает в качестве аргументов идентификатор алгоритма дайджеста и данные для дайджестирования. Он возвращает Promise, который будет выполнен с дайджестом.
Обратите внимание, что этот API не поддерживает потоковый ввод: необходимо прочитать все входные данные в память перед передачей их в функцию дайджестирования.
Синтаксис
digest(algorithm, data)
Параметры
algorithm-
Это может быть строка или объект с единственным свойством
name, которое является строкой. Строка указывает используемую функцию хеширования. Поддерживаемые значения:-
"SHA-1"(но не используйте это в криптографических приложениях) "SHA-256""SHA-384"-
"SHA-512".
-
data-
Объект
ArrayBuffer,TypedArrayилиDataViewсодержащий данные для дайджестирования.
Возвращаемое значение
A Promise, который выполняется с ArrayBuffer, содержащим дайджест.
Поддерживаемые алгоритмы
Алгоритмы дайджестирования, также известные как криптографические функции хеширования, преобразуют произвольный блок данных в выходные данные фиксированной длины, обычно гораздо короче, чем входные данные. Они имеют множество применений в криптографии.
| Алгоритм | Длина результата (бит) | Размер блока (бит) | Спецификация |
|---|---|---|---|
| SHA-1 | 160 | 512 | FIPS 180-4, раздел 6.1 |
| SHA-256 | 256 | 512 | FIPS 180-4, раздел 6.2 |
| SHA-384 | 384 | 1024 | FIPS 180-4, раздел 6.5 |
| SHA-512 | 512 | 1024 | FIPS 180-4, раздел 6.4 |
Предупреждение: SHA-1 теперь считается уязвимым и не должен использоваться в криптографических приложениях.
Примечание: Если вы ищете информацию о создании keyed-hash message authentication code (HMAC), используйте SubtleCrypto.sign().
Примеры
Дополнительные примеры использования API digest() см. в Некриптографические использования SubtleCrypto.
Базовый пример
В этом примере кодируется сообщение, вычисляется его дайджест SHA-256 и выводится длина дайджеста:
const text =
"An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.";
async function digestMessage(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hash = await window.crypto.subtle.digest("SHA-256", data);
return hash;
}
digestMessage(text).then((digestBuffer) =>
console.log(digestBuffer.byteLength),
);
Преобразование дайджеста в шестнадцатеричную строку
Дайджест возвращается как ArrayBuffer, но для сравнения и отображения дайджесты часто представляются шестнадцатеричными строками. В этом примере вычисляется дайджест, а затем преобразуется ArrayBuffer в шестнадцатеричную строку:
const text =
"An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.";
async function digestMessage(message) {
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
const hashBuffer = await window.crypto.subtle.digest("SHA-256", msgUint8); // hash the message
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join(""); // convert bytes to hex string
return hashHex;
}
digestMessage(text).then((digestHex) => console.log(digestHex));
Спецификации
| Спецификация |
|---|
| API Веб-криптографии # SubtleCrypto-method-digest |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
digest |
4137–41В версиях Chrome до 41 параметрalgorithm ожидался как объект. |
7912–79Не поддерживается: SHA-1. |
34 | 2824–28В версиях Opera до 28 параметрalgorithm ожидался как объект. |
7 | 4137–41В версиях Chrome Android до 41 параметрalgorithm ожидался как объект. |
34 | 2824–28В версиях Opera Android до 28 параметрalgorithm ожидался как объект. |
7 | 4.03.0–4.0В версиях Samsung Internet до 4.0 параметрalgorithm ожидался как объект. |
4137–41В версиях WebView Android до 41 параметрalgorithm ожидался как объект. |
См. также
- Некриптографические использования SubtleCrypto
- Спецификация Chromium по безопасным origin
- FIPS 180-4 описывает семейство алгоритмов дайджестирования SHA.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest