Криптография¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:crypto
предоставляет криптографическую функциональность, которая включает набор оберток для функций хэша, HMAC, шифра, расшифровки, подписи и проверки OpenSSL.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Определение отсутствия поддержки криптографии¶
Возможно, что Node.js будет собран без поддержки модуля node:crypto
. В таких случаях попытка импорта
из crypto
или вызов require('node:crypto')
приведет к ошибке.
При использовании CommonJS возникшую ошибку можно перехватить с помощью try/catch
:
1 2 3 4 5 6 |
|
При использовании лексического ключевого слова ESM import
ошибка может быть поймана только в том случае, если обработчик process.on('uncaughtException')
зарегистрирован до любой попытки загрузить модуль (например, с помощью модуля предварительной загрузки).
При использовании ESM, если есть вероятность, что код может быть запущен на сборке Node.js, в которой не включена поддержка криптографии, используйте функцию import()
вместо лексического ключевого слова import
:
1 2 3 4 5 6 |
|
Класс: Certificate
¶
SPKAC - это механизм запроса подписи сертификата, первоначально реализованный компанией Netscape и формально указанный как часть элемента HTML5 keygen
.
<keygen>
устарел с HTML 5.2, и новые проекты больше не должны использовать этот элемент.
Модуль node:crypto
предоставляет класс Certificate
для работы с данными SPKAC. Наиболее распространенным использованием является обработка вывода, генерируемого элементом HTML5 <keygen>
. Node.js использует OpenSSL's SPKAC implementation внутренне.
Статический метод: Certificate.exportChallenge(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<Buffer>
Компонент вызова структуры данныхspkac
, который включает открытый ключ и вызов.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Статический метод: Certificate.exportPublicKey(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<Buffer>
Компонент открытого ключа структуры данныхspkac
, который включает в себя открытый ключ и вызов.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Статический метод: Certificate.verifySpkac(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<boolean>
true
, если данная структура данныхspkac
корректна,false
в противном случае.
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
Legacy API¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
В качестве унаследованного интерфейса можно создавать новые экземпляры класса crypto.Certificate
, как показано в примерах ниже.
new crypto.Certificate()
¶
Экземпляры класса Certificate
могут быть созданы с помощью ключевого слова new
или путем вызова функции crypto.Certificate()
:
1 2 3 4 |
|
1 2 3 4 |
|
certificate.exportChallenge(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<Buffer>
Компонент вызова структуры данныхspkac
, который включает открытый ключ и вызов.
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
certificate.exportPublicKey(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<Buffer>
Компонент открытого ключа структуры данныхspkac
, который включает в себя открытый ключ и вызов.
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
certificate.verifySpkac(spkac[, encoding])
¶
spkac
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиspkac
.- Возвращает:
<boolean>
true
, если данная структура данныхspkac
корректна,false
в противном случае.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
Класс: Cipher
¶
- Расширяет: {stream.Transform}
Экземпляры класса Cipher
используются для шифрования данных. Класс может быть использован одним из двух способов:
- Как поток, который является одновременно читаемым и записываемым, где простые незашифрованные данные записываются для получения зашифрованных данных на читаемой стороне, или
- используя методы
cipher.update()
иcipher.final()
для создания зашифрованных данных.
Методы crypto.createCipher()
или crypto.createCipheriv()
используются для создания экземпляров Cipher
. Объекты Cipher
не должны создаваться напрямую с помощью ключевого слова new
.
Пример: Использование объектов Cipher
в качестве потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Пример: Использование Cipher
и конвейерных потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Пример: Использование методов cipher.update()
и cipher.final()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
cipher.final([outputEncoding])
¶
outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка} Любое оставшееся зашифрованное содержимое. Если указано
outputEncoding
, возвращается строка. ЕслиoutputEncoding
не указан, возвращаетсяBuffer
.
После вызова метода cipher.final()
объект Cipher
больше не может быть использован для шифрования данных. Попытки вызвать cipher.final()
более одного раза приведут к возникновению ошибки.
cipher.getAuthTag()
¶
- Возвращает:
<Buffer>
При использовании аутентифицированного режима шифрования (в настоящее время поддерживаютсяGCM
,CCM
,OCB
иchacha20-poly1305
) методcipher.getAuthTag()
возвращаетBuffer
, содержащий тег аутентификации, который был вычислен из заданных данных.
Метод cipher.getAuthTag()
следует вызывать только после завершения шифрования с помощью метода cipher.final()
.
Если параметр authTagLength
был установлен при создании экземпляра cipher
, эта функция вернет именно authTagLength
байт.
cipher.setAAD(buffer[, options])
¶
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}options
<Object>
stream.transform
options- Возвращает: {Cipher} для цепочки методов.
При использовании аутентифицированного режима шифрования (в настоящее время поддерживаются GCM
, CCM
, OCB
и chacha20-poly1305
) метод cipher.setAAD()
устанавливает значение, используемое для входного параметра дополнительные аутентифицированные данные (AAD).
Параметр plaintextLength
является необязательным для GCM
и OCB
. При использовании CCM
, опция plaintextLength
должна быть указана, и ее значение должно соответствовать длине открытого текста в байтах. Смотрите Режим CCM.
Метод cipher.setAAD()
должен быть вызван до cipher.update()
.
cipher.setAutoPadding([autoPadding])
¶
autoPadding
<boolean>
По умолчанию:true
.- Возвращает: {Cipher} для цепочки методов.
При использовании алгоритмов блочного шифрования класс Cipher
будет автоматически добавлять к входным данным прокладки соответствующего размера блока. Чтобы отключить добавление по умолчанию, вызовите cipher.setAutoPadding(false)
.
Когда autoPadding
имеет значение false
, длина всех входных данных должна быть кратна размеру блока шифра, иначе cipher.final()
выдаст ошибку. Отключение автоматической подшивки полезно при нестандартной подшивке, например, при использовании 0x0
вместо PKCS-подшивки.
Метод cipher.setAutoPadding()
должен быть вызван до cipher.final()
.
cipher.update(data[, inputEncoding][, outputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка данных.outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка}.
Обновляет шифр с data
. Если указан аргумент inputEncoding
, то аргумент data
является строкой, использующей указанную кодировку. Если аргумент inputEncoding
не указан, data
должна быть Buffer
, TypedArray
или DataView
. Если data
является Buffer
, TypedArray
, или DataView
, то inputEncoding
игнорируется.
Параметр outputEncoding
определяет формат вывода зашифрованных данных. Если outputEncoding
указан, то возвращается строка, использующая указанную кодировку. Если outputEncoding
не указан, возвращается Buffer
.
Метод cipher.update()
может быть вызван несколько раз с новыми данными, пока не будет вызван cipher.final()
. Вызов cipher.update()
после cipher.final()
приведет к возникновению ошибки.
Класс: Decipher
¶
- Расширяет: {stream.Transform}
Экземпляры класса Decipher
используются для расшифровки данных. Класс может быть использован одним из двух способов:
- Как поток, который является одновременно читаемым и записываемым, где простые зашифрованные данные записываются для получения незашифрованных данных на читаемой стороне, или
- используя методы
decipher.update()
иdecipher.final()
для получения незашифрованных данных.
Методы crypto.createDecipher()
или crypto.createDecipheriv()
используются для создания экземпляров Decipher
. Объекты Decipher
не должны создаваться напрямую с помощью ключевого слова new
.
Пример: Использование объектов Decipher
в качестве потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Пример: Использование Decipher
и конвейерных потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Пример: Использование методов decipher.update()
и decipher.final()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
decipher.final([outputEncoding])
¶
outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка} Любое оставшееся расшифрованное содержимое. Если указано
outputEncoding
, возвращается строка. ЕслиoutputEncoding
не указан, возвращаетсяBuffer
.
После вызова метода decipher.final()
объект Decipher
больше не может быть использован для расшифровки данных. Попытки вызвать decipher.final()
более одного раза приведут к возникновению ошибки.
decipher.setAAD(buffer[, options])
¶
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}options
<Object>
stream.transform
options- Возвращает: {Decipher} для цепочки методов.
При использовании аутентифицированного режима шифрования (в настоящее время поддерживаются GCM
, CCM
, OCB
и chacha20-poly1305
) метод decipher.setAAD()
устанавливает значение, используемое для входного параметра дополнительные аутентифицированные данные (AAD).
Аргумент options
является необязательным для GCM
. При использовании CCM
должен быть указан параметр plaintextLength
, значение которого должно соответствовать длине шифротекста в байтах. Смотрите Режим CCM.
Метод decipher.setAAD()
должен быть вызван до decipher.update()
.
При передаче строки в качестве буфера
, пожалуйста, учитывайте предостережения при использовании строк в качестве входов в криптографические API.
decipher.setAuthTag(buffer[, encoding])
¶
буфер
{string|Buffer|ArrayBuffer|TypedArray|DataView}encoding
<string>
Кодировка строки, которую следует использовать, когдаbuffer
является строкой.- Возвращает: {Decipher} для цепочки методов.
При использовании аутентифицированного режима шифрования (в настоящее время поддерживаются GCM
, CCM
, OCB
и chacha20-poly1305
), метод decipher.setAuthTag()
используется для передачи полученного тега аутентификации. Если тег не передан, или если текст шифра был подделан, произойдет ошибка decipher.final()
, указывающая на то, что текст шифра должен быть отброшен из-за неудачной аутентификации. Если длина тега недопустима согласно NIST SP 800-38D или не соответствует значению опции authTagLength
, decipher.setAuthTag()
выдаст ошибку.
Метод decipher.setAuthTag()
должен быть вызван до decipher.update()
для режима CCM
или до decipher.final()
для режимов GCM
и OCB
и chacha20-poly1305
. decipher.setAuthTag()
может быть вызван только один раз.
При передаче строки в качестве тега аутентификации, пожалуйста, учитывайте предостережения при использовании строк в качестве входов в криптографические API.
decipher.setAutoPadding([autoPadding])
¶
autoPadding
<boolean>
По умолчанию:true
.- Возвращает: {Decipher} для цепочки методов.
Если данные были зашифрованы без стандартной блочной прокладки, вызов decipher.setAutoPadding(false)
отключит автоматическую прокладку, чтобы предотвратить decipher.final()
от проверки наличия и удаления прокладки.
Отключение автоматической подстановки будет работать только в том случае, если длина входных данных кратна размеру блока шифра.
Метод decipher.setAutoPadding()
должен быть вызван до decipher.final()
.
decipher.update(data[, inputEncoding][, outputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка строкиdata
.outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка}.
Обновляет расшифровку с data
. Если указан аргумент inputEncoding
, то аргумент data
является строкой, использующей указанную кодировку. Если аргумент inputEncoding
не указан, data
должна быть Buffer
. Если data
является Buffer
, то inputEncoding
игнорируется.
Параметр outputEncoding
определяет формат вывода зашифрованных данных. Если outputEncoding
указан, то возвращается строка, использующая указанную кодировку. Если outputEncoding
не указан, возвращается Buffer
.
Метод decipher.update()
может быть вызван несколько раз с новыми данными, пока не будет вызван decipher.final()
. Вызов decipher.update()
после decipher.final()
приведет к возникновению ошибки.
Класс: DiffieHellman
¶
Класс DiffieHellman
- это утилита для создания обменов ключами Диффи-Хеллмана.
Экземпляры класса DiffieHellman
могут быть созданы с помощью функции crypto.createDiffieHellman()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
diffieHellman.computeSecret(otherPublicKey[, inputEncoding][, outputEncoding])
¶
otherPublicKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}inputEncoding
<string>
кодировка строкиotherPublicKey
.outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка}.
Вычисляет общий секрет, используя otherPublicKey
в качестве открытого ключа другой стороны, и возвращает вычисленный общий секрет. Предоставленный ключ интерпретируется с использованием указанного inputEncoding
, а секрет кодируется с использованием указанного outputEncoding
. Если inputEncoding
не указан, ожидается, что otherPublicKey
будет Buffer
, TypedArray
или DataView
.
Если outputEncoding
указан, возвращается строка; в противном случае возвращается Buffer
.
diffieHellman.generateKeys([encoding])
¶
Генерирует значения закрытого и открытого ключей Диффи-Хеллмана и возвращает открытый ключ в указанной кодировке
. Этот ключ должен быть передан другой стороне. Если указано encoding
, возвращается строка; в противном случае возвращается Buffer
.
diffieHellman.getGenerator([encoding])
¶
Возвращает генератор Диффи-Хеллмана в указанном кодировании
. Если указано encoding
, возвращается строка; в противном случае возвращается буфер
.
diffieHellman.getPrime([encoding])
¶
Возвращает прайм Диффи-Хеллмана в указанном кодировании
. Если кодировка
указана, возвращается строка; в противном случае возвращается буфер
.
diffieHellman.getPrivateKey([encoding])
¶
Возвращает закрытый ключ Диффи-Хеллмана в указанной кодировке
. Если encoding
указан, возвращается строка; в противном случае возвращается Buffer
.
diffieHellman.getPublicKey([encoding])
¶
Возвращает открытый ключ Диффи-Хеллмана в указанной кодировке
. Если encoding
указан, возвращается строка; в противном случае возвращается Buffer
.
diffieHellman.setPrivateKey(privateKey[, encoding])
¶
privateKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиprivateKey
.
Устанавливает закрытый ключ Диффи-Хеллмана. Если указан аргумент encoding
, ожидается, что privateKey
будет строкой. Если аргумент encoding
не указан, ожидается, что privateKey
будет Buffer
, TypedArray
или DataView
.
diffieHellman.setPublicKey(publicKey[, encoding])
¶
publicKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиpublicKey
.
Устанавливает открытый ключ Диффи-Хеллмана. Если указан аргумент encoding
, ожидается, что publicKey
будет строкой. Если аргумент encoding
не указан, ожидается, что publicKey
будет Buffer
, TypedArray
или DataView
.
diffieHellman.verifyError
¶
Битовое поле, содержащее любые предупреждения и/или ошибки, возникшие в результате проверки, выполненной во время инициализации объекта DiffieHellman
.
Для этого свойства действительны следующие значения (как определено в модуле node:constants
):
DH_CHECK_P_NOT_SAFE_PRIME
.DH_CHECK_P_NOT_PRIME
DH_UNABLE_TO_CHECK_GENERATOR
DH_NOT_SUITABLE_GENERATOR
Класс: DiffieHellmanGroup
¶
Класс DiffieHellmanGroup
принимает в качестве аргумента известную modp-группу. Он работает так же, как и DiffieHellman
, за исключением того, что он не позволяет изменять свои ключи после создания. Другими словами, он не реализует методы setPublicKey()
и setPrivateKey()
.
1 2 3 4 |
|
1 2 |
|
Поддерживаются следующие группы:
'modp14'
(2048 бит, RFC 3526 Раздел 3)'modp15'
(3072 бита, RFC 3526 Раздел 4)'modp16'
(4096 бит, RFC 3526 Раздел 5)'modp17'
(6144 бит, RFC 3526 Раздел 6)'modp18'
(8192 бита, RFC 3526 Раздел 7)
Следующие группы все еще поддерживаются, но устарели (см. Caveats):
'modp1'
(768 bits, RFC 2409 Section 6.1)'modp2'
(1024 bits, RFC 2409 Section 6.2)'modp5'
(1536 bits, RFC 3526 Section 2)
Эти устаревшие группы могут быть удалены в будущих версиях Node.js.
Класс: ECDH
¶
Класс ECDH
- это утилита для создания обменов ключами Elliptic Curve Diffie-Hellman (ECDH).
Экземпляры класса ECDH
могут быть созданы с помощью функции crypto.createECDH()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Статический метод: ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])
¶
key
{string|ArrayBuffer|Buffer|TypedArray|DataView}curve
<string>
inputEncoding
<string>
кодировка строкиkey
.outputEncoding
<string>
кодировка возвращаемого значения.формат
<string>
По умолчанию:uncompressed
.- Возвращает: {Буфер | строка}
Преобразует открытый ключ EC Диффи-Хеллмана, указанный key
и curve
в формат, указанный format
. Аргумент format
задает кодировку точки и может быть сжатым
, несжатым
или гибридным
. Предоставленный ключ интерпретируется с использованием указанного inputEncoding
, а возвращаемый ключ кодируется с использованием указанного outputEncoding
.
Используйте crypto.getCurves()
для получения списка доступных имен кривых. В последних выпусках OpenSSL, openssl ecparam -list_curves
также отобразит имя и описание каждой доступной эллиптической кривой.
Если format
не указан, точка будет возвращена в формате uncompressed
.
Если inputEncoding
не указан, ожидается, что key
будет Buffer
, TypedArray
или DataView
.
Пример (распаковка ключа):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
ecdh.computeSecret(otherPublicKey[, inputEncoding][, outputEncoding])
¶
otherPublicKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}inputEncoding
<string>
кодировка строкиotherPublicKey
.outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка}.
Вычисляет общий секрет, используя otherPublicKey
в качестве открытого ключа другой стороны, и возвращает вычисленный общий секрет. Предоставленный ключ интерпретируется с использованием указанного inputEncoding
, а возвращаемый секрет кодируется с использованием указанного outputEncoding
. Если inputEncoding
не указан, ожидается, что otherPublicKey
будет Buffer
, TypedArray
или DataView
.
Если задано outputEncoding
, возвращается строка; в противном случае возвращается Buffer
.
ecdh.computeSecret
будет выдавать ошибку ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY
, если otherPublicKey
лежит за пределами эллиптической кривой. Поскольку otherPublicKey
обычно передается от удаленного пользователя по незащищенной сети, не забудьте обработать это исключение соответствующим образом.
ecdh.generateKeys([encoding[, format]])
¶
encoding
<string>
кодировка возвращаемого значения.формат
<string>
По умолчанию:uncompressed
.- Возвращает: {Буфер | строка}
Генерирует значения закрытого и открытого ключей EC Diffie-Hellman и возвращает открытый ключ в указанном формате
и кодировке
. Этот ключ должен быть передан другой стороне.
Аргумент формат
задает кодировку точки и может быть сжатым
или несжатым
. Если format
не указан, точка будет возвращена в формате 'uncompressed'
.
Если указано encoding
, возвращается строка; в противном случае возвращается Buffer
.
ecdh.getPrivateKey([encoding])
¶
encoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка} EC Diffie-Hellman в указанном
кодировании
.
Если указано encoding
, возвращается строка; в противном случае возвращается буфер
.
ecdh.getPublicKey([encoding][, format])
¶
encoding
<string>
кодировка возвращаемого значения.формат
<string>
По умолчанию:uncompressed
.- Возвращает: {Буфер | строка} Открытый ключ EC Diffie-Hellman в указанном
кодировании
иформате
.
Аргумент формат
определяет кодировку точки и может быть сжатым
или несжатым
. Если формат
не указан, точка будет возвращена в формате без сжатия
.
Если указано encoding
, возвращается строка, в противном случае возвращается Buffer
.
ecdh.setPrivateKey(privateKey[, encoding])
¶
privateKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиprivateKey
.
Устанавливает закрытый ключ EC Diffie-Hellman. Если указано encoding
, ожидается, что privateKey
будет строкой, в противном случае privateKey
будет Buffer
, TypedArray
или DataView
.
Если privateKey
не действителен для кривой, указанной при создании объекта ECDH
, будет выдана ошибка. При установке закрытого ключа, связанная с ним открытая точка (ключ) также генерируется и устанавливается в объекте ECDH
.
ecdh.setPublicKey(publicKey[, encoding])
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
publicKey
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
кодировка строкиpublicKey
.
Устанавливает открытый ключ EC Diffie-Hellman. Если указано encoding
, то ожидается, что publicKey
будет строкой; в противном случае ожидается Buffer
, TypedArray
или DataView
.
Обычно нет причин вызывать этот метод, поскольку ECDH
требует только закрытый ключ и открытый ключ другой стороны для вычисления общего секрета. Обычно вызывается либо ecdh.generateKeys()
, либо ecdh.setPrivateKey()
. Метод ecdh.setPrivateKey()
пытается сгенерировать публичную точку/ключ, связанный с устанавливаемым закрытым ключом.
Пример (получение общего секрета):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
Класс: Hash
¶
- Расширяет: {stream.Transform}
Класс Hash
- это утилита для создания хэш-дайджестов данных. Он может быть использован одним из двух способов:
- В качестве stream, доступного как для чтения, так и для записи, где данные записываются для получения вычисленного хэш-дайджеста на стороне, доступной для чтения, или
- используя методы
hash.update()
иhash.digest()
для создания вычисленного хэша.
Метод crypto.createHash()
используется для создания экземпляров Hash
. Объекты Hash
не должны создаваться напрямую с помощью ключевого слова new
.
Пример: Использование объектов Hash
в качестве потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Пример: Использование Hash
и конвейерных потоков:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
Пример: Использование методов hash.update()
и hash.digest()
:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
hash.copy([options])
¶
options
<Object>
stream.transform
options- Возвращает: {Hash}
Создает новый объект Hash
, который содержит глубокую копию внутреннего состояния текущего объекта Hash
.
Необязательный аргумент options
управляет поведением потока. Для хэш-функций XOF, таких как 'shake256'
, опция outputLength
может быть использована для указания желаемой длины вывода в байтах.
При попытке скопировать объект Hash
после вызова его метода hash.digest()
возникает ошибка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
hash.digest([encoding])
¶
Вычисляет дайджест всех данных, переданных для хеширования (с помощью метода hash.update()
). Если указано encoding
, то возвращается строка; в противном случае возвращается Buffer
.
Объект Hash
не может быть использован повторно после вызова метода hash.digest()
. Многократные вызовы приведут к возникновению ошибки.
hash.update(data[, inputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка строкиdata
.
Обновляет содержимое хэша с заданными data
, кодировка которых указана в inputEncoding
. Если encoding
не указан, а данные
являются строкой, то применяется кодировка 'utf8'
. Если data
является Buffer
, TypedArray
или DataView
, то inputEncoding
игнорируется.
Эта функция может вызываться много раз с новыми данными по мере их передачи.
Класс: Hmac
¶
- Расширяет: {stream.Transform}
Класс Hmac
- это утилита для создания криптографических HMAC-дайджестов. Он может быть использован одним из двух способов:
- В виде stream, доступного как для чтения, так и для записи, где данные записываются для получения вычисленного HMAC-дайджеста на стороне, доступной для чтения, или
- используя методы
hmac.update()
иhmac.digest()
для создания вычисленного HMAC-дайджеста.
Метод crypto.createHmac()
используется для создания экземпляров Hmac
. Объекты Hmac
не должны создаваться напрямую с помощью ключевого слова new
.
Пример: Использование объектов Hmac
в качестве потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Пример: Использование Hmac
и конвейерных потоков:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
Пример: Использование методов hmac.update()
и hmac.digest()
:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
hmac.digest([encoding])
¶
Вычисляет HMAC-дайджест всех данных, переданных с помощью hmac.update()
. Если указано encoding
, возвращается строка; в противном случае возвращается Buffer
;
Объект Hmac
не может быть использован повторно после вызова hmac.digest()
. Многократные вызовы hmac.digest()
приведут к возникновению ошибки.
hmac.update(data[, inputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка строкиdata
.
Обновляет содержимое Hmac
с заданными data
, кодировка которых указана в inputEncoding
. Если encoding
не указан, а данные
являются строкой, то применяется кодировка 'utf8'
. Если data
является Buffer
, TypedArray
или DataView
, то inputEncoding
игнорируется.
Эта функция может вызываться много раз с новыми данными по мере их передачи.
Класс: KeyObject
¶
Node.js использует класс KeyObject
для представления симметричного или асимметричного ключа, и каждый вид ключа открывает различные функции. Методы crypto.createSecretKey()
, crypto.createPublicKey()
и crypto.createPrivateKey()
используются для создания экземпляров KeyObject
. Объекты KeyObject
не должны создаваться непосредственно с помощью ключевого слова new
.
Большинство приложений должны рассмотреть возможность использования нового API KeyObject
вместо передачи ключей в виде строк или буфера
из-за улучшенных функций безопасности.
Экземпляры KeyObject
могут быть переданы другим потокам через postMessage()
. Получатель получает клонированный KeyObject
, и KeyObject
не нужно указывать в аргументе transferList
.
Статический метод: KeyObject.from(key)
¶
key
{CryptoKey}- Возвращает: {KeyObject}
Пример: Преобразование экземпляра CryptoKey
в KeyObject
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
keyObject.asymmetricKeyDetails
¶
<Object>
modulusLength
:<number>
Размер ключа в битах (RSA, DSA).publicExponent
:<bigint>
Публичная экспонента (RSA).hashAlgorithm
:<string>
Имя дайджеста сообщения (RSA-PSS).mgf1HashAlgorithm
:<string>
Имя дайджеста сообщения, используемого MGF1 (RSA-PSS).saltLength
:<number>
Минимальная длина соли в байтах (RSA-PSS).divisorLength
:<number>
Размерq
в битах (DSA).namedCurve
:<string>
Имя кривой (EC).
Это свойство существует только для асимметричных ключей. В зависимости от типа ключа, этот объект содержит информацию о ключе. Никакая информация, полученная через это свойство, не может быть использована для уникальной идентификации ключа или для нарушения безопасности ключа.
Для ключей RSA-PSS, если материал ключа содержит последовательность RSASSA-PSS-params
, будут установлены свойства hashAlgorithm
, mgf1HashAlgorithm
и saltLength
.
Другие детали ключа могут быть раскрыты через этот API с помощью дополнительных атрибутов.
keyObject.asymmetricKeyType
¶
Для асимметричных ключей это свойство представляет тип ключа. Поддерживаются следующие типы ключей:
rsa
(OID 1.2.840.113549.1.1.1)rsa-pss
(OID 1.2.840.113549.1.1.10)dsa
(OID 1.2.840.10040.4.1)ec
(OID 1.2.840.10045.2.1)x25519
(OID 1.3.101.110)x448
(OID 1.3.101.111)ed25519
(OID 1.3.101.112)ed448
(OID 1.3.101.113)dh
(OID 1.2.840.113549.1.3.1)
Это свойство не определено
для нераспознанных типов KeyObject
и симметричных ключей.
keyObject.export([options])
¶
options
:<Object>
- Возвращает: {строка | буфер | объект}.
Для симметричных ключей можно использовать следующие параметры кодировки:
формат
:<string>
. Должно бытьбуфер
(по умолчанию) илиjwk
.
Для открытых ключей можно использовать следующие параметры кодировки:
type
:<string>
. Должно быть одно из'pkcs1'
(только RSA) или'spki'
.формат
:<string>
Должен быть'pem'
,'der'
или'jwk'
.
Для закрытых ключей можно использовать следующие параметры кодировки:
type
:<string>
. Должно быть одно из'pkcs1'
(только RSA),'pkcs8'
или'sec1'
(только EC).формат
:<string>
. Должен быть'pem'
,'der'
или'jwk'
.шифр
:<string>
. Если указано, закрытый ключ будет зашифрован с помощью заданныхшифра
ипасфразы
с использованием PKCS#5 v2.0 шифрования на основе пароля.passphrase
: {строка | буфер} Парольная фраза, используемая для шифрования, см.шифр
.
Тип результата зависит от выбранного формата кодирования, при PEM результатом будет строка, при DER - буфер, содержащий данные, закодированные как DER, при JWK - объект.
Если выбран формат кодирования JWK, все остальные варианты кодирования игнорируются.
Ключи типов PKCS#1, SEC1 и PKCS#8 могут быть зашифрованы с помощью комбинации опций шифр
и формат
. PKCS#8 type
можно использовать с любым format
для шифрования любого алгоритма ключа (RSA, EC или DH), указав cipher
. PKCS#1 и SEC1 могут быть зашифрованы путем указания шифра
только при использовании формата PEM
. Для максимальной совместимости используйте PKCS#8 для зашифрованных закрытых ключей. Поскольку PKCS#8 определяет свой собственный механизм шифрования, шифрование на уровне PEM не поддерживается при шифровании ключа PKCS#8. См. RFC 5208 для шифрования PKCS#8 и RFC 1421 для шифрования PKCS#1 и SEC1.
keyObject.equals(otherKeyObject)
¶
otherKeyObject
: {KeyObject} ОбъектKeyObject
, с которым сравниваетсяkeyObject
.- Возвращает:
<boolean>
Возвращает true
или false
в зависимости от того, имеют ли ключи абсолютно одинаковый тип, значение и параметры. Этот метод не является постоянным временем.
keyObject.symmetricKeySize
¶
Для секретных ключей это свойство представляет размер ключа в байтах. Для асимметричных ключей это свойство не определено
.
keyObject.type
¶
В зависимости от типа данного KeyObject
, это свойство является либо 'secret'
для секретных (симметричных) ключей, либо 'public'
для открытых (асимметричных) ключей, либо 'private'
для закрытых (асимметричных) ключей.
Класс: Sign
¶
- Расширяет:
<stream.Writable>
Класс Sign
- это утилита для генерации подписей. Он может быть использован одним из двух способов:
- Как записываемый stream, в который записываются данные, подлежащие подписи, а метод
sign.sign()
используется для генерации и возврата подписи, или - Использование методов
sign.update()
иsign.sign()
для создания подписи.
Метод crypto.createSign()
используется для создания экземпляров Sign
. Аргументом является строковое имя используемой хэш-функции. Объекты Sign
не должны создаваться напрямую с помощью ключевого слова new
.
Пример: Использование объектов Sign
и Verify
в качестве потоков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Пример: Использование методов sign.update()
и verify.update()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
sign.sign(privateKey[, outputEncoding])
¶
privateKey
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}outputEncoding
<string>
кодировка возвращаемого значения.- Возвращает: {Буфер | строка}.
Вычисляет подпись на всех переданных данных, используя либо sign.update()
, либо sign.write()
.
Если privateKey
не является KeyObject
, эта функция ведет себя так, как если бы privateKey
был передан в crypto.createPrivateKey()
. Если это объект, могут быть переданы следующие дополнительные свойства:
-
dsaEncoding
<string>
Для DSA и ECDSA этот параметр определяет формат генерируемой подписи. Он может быть одним из следующих:der
(по умолчанию): DER-кодирование ASN.1 структуры подписи в кодировке(r, s)
.'ieee-p1363'
: Формат подписиr || s
, предложенный в IEEE-P1363.
-
padding
<integer>
Необязательное значение прокладки для RSA, одно из следующих:crypto.constants.RSA_PKCS1_PADDING
(по умолчанию)crypto.constants.RSA_PKCS1_PSS_PADDING
RSA_PKCS1_PSS_PADDING
будет использовать MGF1 с той же хэш-функцией, которая используется для подписи сообщения, как указано в разделе 3.1 RFC 4055, если только хэш-функция MGF1 не была указана как часть ключа в соответствии с разделом 3.3 RFC 4055. -
saltLength
<integer>
Длина соли для случая, когда padding равенRSA_PKCS1_PSS_PADDING
. Специальное значениеcrypto.constants.RSA_PSS_SALTLEN_DIGEST
устанавливает длину соли в размер дайджеста,crypto.constants.RSA_PSS_SALTLEN_MAX_SIGN
(по умолчанию) - в максимально допустимое значение.
Если указано outputEncoding
, возвращается строка; в противном случае возвращается буфер
.
Объект Sign
не может быть повторно использован после вызова метода sign.sign()
. Многократные вызовы метода sign.sign()
приведут к возникновению ошибки.
sign.update(data[, inputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка строкиdata
.
Обновляет содержимое Sign
с заданными data
, кодировка которых указана в inputEncoding
. Если encoding
не указан, и данные
являются строкой, то применяется кодировка 'utf8'
. Если data
является Buffer
, TypedArray
или DataView
, то inputEncoding
игнорируется.
Эта функция может вызываться много раз с новыми данными по мере их передачи.
Класс: Verify
¶
- Расширяет:
<stream.Writable>
Класс Verify
- это утилита для проверки подписей. Он может быть использован одним из двух способов:
- Как записываемый stream, где записанные данные используются для проверки на соответствие предоставленной подписи, или
- Используя методы
verify.update()
иverify.verify()
для проверки подписи.
Метод crypto.createVerify()
используется для создания экземпляров Verify
. Объекты Verify
не должны создаваться напрямую с помощью ключевого слова new
.
Примеры смотрите в Sign
.
verify.update(data[, inputEncoding])
¶
data
<string>
|<Buffer>
|<TypedArray>
|<DataView>
inputEncoding
<string>
кодировка строкиdata
.
Обновляет содержимое Verify
с заданными data
, кодировка которых указана в inputEncoding
. Если inputEncoding
не указан, а данные
являются строкой, применяется кодировка 'utf8'
. Если data
является Buffer
, TypedArray
или DataView
, то inputEncoding
игнорируется.
Эта функция может вызываться много раз с новыми данными по мере их передачи.
verify.verify(object, signature[, signatureEncoding])
¶
object
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}signature
{string|ArrayBuffer|Buffer|TypedArray|DataView}signatureEncoding
<string>
кодировка строкиsignature
.- Возвращает:
<boolean>
true
илиfalse
в зависимости от достоверности подписи для данных и открытого ключа.
Проверяет предоставленные данные с помощью заданных объекта
и подписи
.
Если object
не является KeyObject
, эта функция ведет себя так, как если бы object
был передан в crypto.createPublicKey()
. Если это объект, то могут быть переданы следующие дополнительные свойства:
-
dsaEncoding
<string>
Для DSA и ECDSA этот параметр определяет формат подписи. Он может быть одним из следующих:'der
(по умолчанию): DER-кодирование ASN.1 структуры подписи в кодировке(r, s)
.'ieee-p1363'
: Формат подписиr || s
, предложенный в IEEE-P1363.
-
padding
<integer>
Необязательное значение прокладки для RSA, одно из следующих:crypto.constants.RSA_PKCS1_PADDING
(по умолчанию)crypto.constants.RSA_PKCS1_PSS_PADDING
RSA_PKCS1_PSS_PADDING
будет использовать MGF1 с той же хэш-функцией, которая используется для проверки сообщения, как указано в разделе 3.1 RFC 4055, если только хэш-функция MGF1 не была указана как часть ключа в соответствии с разделом 3.3 RFC 4055. -
saltLength
<integer>
Длина соли для случая, когда padding равенRSA_PKCS1_PSS_PADDING
. Специальное значениеcrypto.constants.RSA_PSS_SALTLEN_DIGEST
устанавливает длину соли в соответствии с размером дайджеста,crypto.constants.RSA_PSS_SALTLEN_AUTO
(по умолчанию) заставляет ее определяться автоматически.
Аргумент signature
- это ранее вычисленная подпись для данных в кодировке signatureEncoding
. Если указано signatureEncoding
, то ожидается, что signature
будет строкой, в противном случае signature
будет Buffer
, TypedArray
или DataView
.
Объект verify
не может быть использован повторно после вызова verify.verify()
. Многократные вызовы verify.verify()
приведут к возникновению ошибки.
Поскольку открытые ключи могут быть производными от закрытых ключей, вместо открытого ключа можно передать закрытый ключ.
Класс: X509Certificate
¶
Инкапсулирует сертификат X509 и предоставляет доступ к его информации только для чтения.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
new X509Certificate(buffer)
¶
buffer
{string|TypedArray|Buffer|DataView} Сертификат X509 в кодировке PEM или DER.
x509.ca
¶
- Тип:
<boolean>
Будетtrue
, если это сертификат центра сертификации (ЦС).
x509.checkEmail(email[, options])
¶
email
<string>
options
<Object>
subject
<string>
по умолчанию
,всегда
, илиникогда
. По умолчанию: `'по умолчанию'*.
- Возвращает: {string|undefined} Возвращает
email
, если сертификат соответствует,undefined
, если не соответствует.
Проверяет, соответствует ли сертификат заданному адресу электронной почты.
Если параметр 'subject'
неопределен или установлен в 'default'
, тема сертификата рассматривается только в том случае, если альтернативное расширение имени subject либо не существует, либо не содержит никаких адресов электронной почты.
Если опция 'subject'
установлена в 'always'
и если альтернативное расширение имени subject либо не существует, либо не содержит подходящего адреса электронной почты, то рассматривается тема сертификата.
Если опция 'subject'
установлена в 'never'
, тема сертификата никогда не рассматривается, даже если сертификат не содержит альтернативных имен темы.
x509.checkHost(name[, options])
¶
name
<string>
options
<Object>
- Возвращает: {string|undefined} Возвращает имя субъекта, соответствующее
name
, илиundefined
, если ни одно имя субъекта не соответствуетname
.
Проверяет, соответствует ли сертификат заданному имени хоста.
Если сертификат соответствует заданному имени хоста, возвращается соответствующее имя субъекта. Возвращаемое имя может быть точным (например, foo.example.com
) или содержать подстановочные знаки (например, *.example.com
). Поскольку сравнение имен хостов не чувствительно к регистру, возвращаемое имя субъекта может отличаться от заданного name
по капитализации.
Если опция 'subject'
не определена или установлена в 'default'
, субъект сертификата рассматривается только в том случае, если расширение альтернативного имени субъекта либо не существует, либо не содержит никаких имен DNS. Такое поведение соответствует RFC 2818 ("HTTP Over TLS").
Если опция 'subject'
установлена в 'always'
и если расширение альтернативного имени субъекта либо не существует, либо не содержит подходящего DNS-имени, рассматривается субъект сертификата.
Если опция 'subject'
установлена в 'never'
, субъект сертификата никогда не рассматривается, даже если сертификат не содержит альтернативных имен субъекта.
x509.checkIP(ip)
¶
ip
<string>
- Возвращает: {string|undefined} Возвращает
ip
, если сертификат соответствует,undefined
, если не соответствует.
Проверяет соответствие сертификата заданному IP-адресу (IPv4 или IPv6).
Учитываются только RFC 5280 iPAddress
предметные альтернативные имена, которые должны точно совпадать с заданным ip
адресом. Другие альтернативные имена субъектов, а также поле subject сертификата игнорируются.
x509.checkIssued(otherCert)
¶
otherCert
{X509Certificate}- Возвращает:
<boolean>
Проверяет, был ли этот сертификат выпущен данным otherCert
.
x509.checkPrivateKey(privateKey)
¶
privateKey
{KeyObject} Закрытый ключ.- Возвращает:
<boolean>
.
Проверяет, соответствует ли открытый ключ данного сертификата заданному закрытому ключу.
x509.fingerprint
¶
- Тип:
<string>
Отпечаток SHA-1 этого сертификата.
Поскольку SHA-1 является криптографически неполноценным и поскольку безопасность SHA-1 значительно хуже, чем у алгоритмов, которые обычно используются для подписания сертификатов, подумайте об использовании x509.fingerprint256
вместо этого.
x509.fingerprint256
¶
- Тип:
<string>
Отпечаток SHA-256 этого сертификата.
x509.fingerprint512
¶
- Тип:
<string>
Отпечаток SHA-512 этого сертификата.
Поскольку вычисление отпечатка SHA-256 обычно происходит быстрее, а его размер в два раза меньше, чем у отпечатка SHA-512, x509.fingerprint256
может быть лучшим выбором. Хотя SHA-512, предположительно, обеспечивает более высокий уровень безопасности в целом, безопасность SHA-256 соответствует безопасности большинства алгоритмов, которые обычно используются для подписания сертификатов.
x509.infoAccess
¶
- Тип:
<string>
Текстовое представление расширения доступа к информации об авторитете сертификата.
Это список описаний доступа, разделенных переводом строки. Каждая строка начинается с метода доступа и вида места доступа, затем следует двоеточие и значение, связанное с местом доступа.
После префикса, обозначающего метод доступа и вид места доступа, оставшаяся часть каждой строки может быть заключена в кавычки, чтобы указать, что значение является литералом строки JSON. Для обратной совместимости Node.js использует строковые литералы JSON в этом свойстве только при необходимости, чтобы избежать двусмысленности. Код сторонних разработчиков должен быть готов к обработке обоих возможных форматов ввода.
x509.issuer
¶
- Тип:
<string>
Идентификатор эмитента, включенный в данный сертификат.
x509.issuerCertificate
¶
- Тип: {X509Certificate}
Сертификат эмитента или undefined
, если сертификат эмитента недоступен.
x509.keyUsage
¶
- Тип:
<string[]>
Массив с подробным описанием использования ключей для этого сертификата.
x509.publicKey
¶
- Тип: {KeyObject}
Открытый ключ {KeyObject} для этого сертификата.
x509.raw
¶
- Тип:
<Buffer>
Буфер, содержащий DER-кодировку данного сертификата.
x509.serialNumber
¶
- Тип:
<string>
Серийный номер данного сертификата.
Серийные номера присваиваются центрами сертификации и не являются уникальной идентификацией сертификатов. Вместо этого используйте x509.fingerprint256
в качестве уникального идентификатора.
x509.subject
¶
- Тип:
<string>
Полный субъект этого сертификата.
x509.subjectAltName
¶
- Тип:
<string>
Альтернативное имя субъекта, указанное для этого сертификата.
Это список альтернативных имен субъектов, разделенных запятыми. Каждая запись начинается со строки, определяющей вид альтернативного имени субъекта, за которой следует двоеточие и значение, связанное с этой записью.
Ранние версии Node.js ошибочно полагали, что безопасно разделять это свойство на двухсимвольную последовательность ', '
(см. CVE-2021-44532). Однако как вредоносные, так и легитимные сертификаты могут содержать альтернативные имена субъектов, включающие эту последовательность при представлении в виде строки.
После префикса, обозначающего тип записи, оставшаяся часть каждой записи может быть заключена в кавычки, чтобы указать, что значение является строковым литералом JSON. Для обратной совместимости Node.js использует строковые литералы JSON в этом свойстве только при необходимости, чтобы избежать двусмысленности. Код сторонних разработчиков должен быть готов к обработке обоих возможных форматов ввода.
x509.toJSON()
¶
- Тип:
<string>
Не существует стандартной кодировки JSON для сертификатов X509. Метод toJSON()
возвращает строку, содержащую сертификат в кодировке PEM.
x509.toLegacyObject()
¶
- Тип:
<Object>
Возвращает информацию об этом сертификате, используя кодировку legacy certificate object.
x509.toString()
¶
- Тип:
<string>
Возвращает сертификат в PEM-кодировке.
x509.validFrom
¶
- Тип:
<string>
Дата/время, с которой данный сертификат считается действительным.
x509.validTo
¶
- Тип:
<string>
Дата/время, до которого этот сертификат считается действительным.
x509.verify(publicKey)
¶
publicKey
{KeyObject} Открытый ключ.- Возвращает:
<boolean>
Проверяет, что данный сертификат был подписан данным открытым ключом. Не выполняет никаких других проверок сертификата.
Методы и свойства модуля node:crypto
¶
crypto.constants
¶
Объект, содержащий часто используемые константы для операций, связанных с криптографией и безопасностью. Конкретные константы, определенные в настоящее время, описаны в Crypto constants.
crypto.DEFAULT_ENCODING
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Кодировка по умолчанию для функций, которые могут принимать либо строки, либо buffers. Значение по умолчанию - buffer
, что заставляет методы по умолчанию использовать объекты `Buffer'.
Механизм crypto.DEFAULT_ENCODING
предусмотрен для обратной совместимости с устаревшими программами, которые ожидают, что 'latin1'
будет кодировкой по умолчанию.
Новые приложения должны ожидать, что по умолчанию будет использоваться кодировка 'buffer'
.
Это свойство устарело.
crypto.fips
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Свойство для проверки и контроля того, используется ли в настоящее время FIPS-совместимый криптопровайдер. Установка значения true требует FIPS-сборки Node.js.
Это свойство устарело. Вместо него используйте crypto.setFips()
и crypto.getFips()
.
crypto.checkPrime(candidate[, options], callback)
¶
candidate
{ArrayBuffer|SharedArrayBuffer|TypedArray|Buffer|DataView|bigint} A possible prime encoded as a sequence of big endian octets of arbitrary length.options
<Object>
checks
<number>
The number of Miller-Rabin probabilistic primality iterations to perform. When the value is0
(zero), a number of checks is used that yields a false positive rate of at most 2-64 for random input. Care must be used when selecting a number of checks. Refer to the OpenSSL documentation for theBN_is_prime_ex
functionnchecks
options for more details. Default:0
callback
<Function>
Checks the primality of the candidate
.
crypto.checkPrimeSync(candidate[, options])
¶
candidate
{ArrayBuffer|SharedArrayBuffer|TypedArray|Buffer|DataView|bigint} Возможный прайм, закодированный как последовательность октетов big endian произвольной длины.options
<Object>
checks
<number>
The number of Miller-Rabin probabilistic primality iterations to perform. Если значение равно0
(ноль), используется такое количество проверок, которое дает коэффициент ложных срабатываний не более 2-64 для случайного ввода. При выборе количества проверок следует проявлять осторожность. Более подробную информацию см. в документации OpenSSL для опций функцииnchecks
BN_is_prime_ex
. По умолчанию:0
.
- Возвращает:
<boolean>
true
, если кандидат является простым с вероятностью ошибки меньше чем0.25 ** options.checks
.
Проверяет первичность candidate
.
crypto.createCipher(algorithm, password[, options])
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте crypto.createCipheriv()
вместо этого.
алгоритм
<string>
пароль
{string|ArrayBuffer|Buffer|TypedArray|DataView}options
<Object>
stream.transform
options- Возвращает: {Cipher}
Создает и возвращает объект Cipher
, использующий заданные алгоритм
и пароль
.
Аргумент options
управляет поведением потока и является необязательным, за исключением случаев, когда используется шифр в режиме CCM или OCB (например, 'aes-128-ccm'
). В этом случае опция authTagLength
является обязательной и определяет длину тега аутентификации в байтах, см. CCM mode. В режиме GCM опция authTagLength
не обязательна, но может использоваться для установки длины тега аутентификации, который будет возвращен функцией getAuthTag()
и по умолчанию составляет 16 байт. Для chacha20-poly1305
опция authTagLength
по умолчанию равна 16 байтам.
Алгоритм algorithm
зависит от OpenSSL, примеры: 'aes192'
и т.д. В последних выпусках OpenSSL, openssl list -cipher-algorithms
покажет доступные алгоритмы шифрования.
Пароль password
используется для получения ключа шифрования и вектора инициализации (IV). The value must be either a 'latin1'
encoded string, a Buffer
, a TypedArray
, or a DataView
.
Эта функция семантически небезопасна для всех поддерживаемых шифров и фатально ошибочна для шифров в режиме счетчика (таких как CTR, GCM или CCM).
Реализация crypto.createCipher()
создает ключи с помощью функции OpenSSL EVP_BytesToKey
с алгоритмом дайджеста MD5, одной итерацией и без соли. Отсутствие соли позволяет проводить атаки по словарю, поскольку один и тот же пароль всегда создает один и тот же ключ. Малое количество итераций и некриптографически защищенный алгоритм хэширования позволяют проверять пароли очень быстро.
В соответствии с рекомендацией OpenSSL использовать более современный алгоритм вместо EVP_BytesToKey
, разработчикам рекомендуется самостоятельно определять ключ и IV с помощью crypto.scrypt()
и использовать crypto.createCipheriv()
для создания объекта Cipher
. Пользователи не должны использовать шифры с режимом счетчика (например, CTR, GCM или CCM) в crypto.createCipher()
. При их использовании выдается предупреждение, чтобы избежать риска повторного использования IV, приводящего к уязвимостям. Для случая, когда IV повторно используется в GCM, смотрите Nonce-Disrespecting Adversaries для подробностей.
crypto.createCipheriv(algorithm, key, iv[, options])
¶
алгоритм
<string>
key
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}iv
{string|ArrayBuffer|Buffer|TypedArray|DataView|null}options
<Object>
stream.transform
options- Возвращает: {Cipher}
Создает и возвращает объект Cipher
с заданным алгоритмом
, ключом
и вектором инициализации (iv
).
Аргумент options
управляет поведением потока и является необязательным, за исключением случаев, когда используется шифр в режиме CCM или OCB (например, 'aes-128-ccm'
). В этом случае опция authTagLength
является обязательной и определяет длину тега аутентификации в байтах, см. CCM mode. В режиме GCM опция authTagLength
не обязательна, но может использоваться для установки длины тега аутентификации, который будет возвращен функцией getAuthTag()
и по умолчанию составляет 16 байт. Для chacha20-poly1305
опция authTagLength
по умолчанию равна 16 байтам.
Алгоритм algorithm
зависит от OpenSSL, примеры: 'aes192'
и т. д. В последних выпусках OpenSSL опция openssl list -cipher-algorithms
покажет доступные алгоритмы шифрования.
Ключ key
- это необработанный ключ, используемый алгоритмом
, а iv
- это вектор инициализации. Оба аргумента должны быть строками в кодировке 'utf8
, Buffers, TypedArray
или DataView
. Ключ может быть KeyObject
типа secret
. Если шифру не требуется вектор инициализации, iv
может быть null
.
При передаче строк для key
или iv
, пожалуйста, учитывайте предостережения при использовании строк в качестве входов в криптографические API.
Векторы инициализации должны быть непредсказуемыми и уникальными; в идеале они должны быть криптографически случайными. Они не обязательно должны быть секретными: IV обычно просто добавляются к шифротекстовым сообщениям в незашифрованном виде. Может показаться противоречивым, что что-то должно быть непредсказуемым и уникальным, но не должно быть секретным; помните, что атакующий не должен иметь возможности заранее предсказать, каким будет данный IV.
crypto.createDecipher(algorithm, password[, options])
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вместо этого используйте crypto.createDecipheriv()
.
algorithm
<string>
password
{string|ArrayBuffer|Buffer|TypedArray|DataView}options
<Object>
stream.transform
options- Returns: {Decipher}
Создает и возвращает объект Decipher
, использующий заданный алгоритм
и пароль
(ключ).
Аргумент options
управляет поведением потока и является необязательным, за исключением случаев, когда используется шифр в режиме CCM или OCB (например, 'aes-128-ccm'
). В этом случае опция authTagLength
является обязательной и определяет длину тега аутентификации в байтах, см. CCM mode. Для chacha20-poly1305
опция authTagLength
по умолчанию равна 16 байтам.
Эта функция семантически небезопасна для всех поддерживаемых шифров и фатально небезопасна для шифров в режиме счетчика (таких как CTR, GCM или CCM).
Реализация crypto.createDecipher()
извлекает ключи с помощью функции OpenSSL EVP_BytesToKey
с алгоритмом дайджеста MD5, одной итерацией и без соли. Отсутствие соли позволяет проводить атаки по словарю, так как один и тот же пароль всегда создает один и тот же ключ. Малое количество итераций и некриптографически безопасный алгоритм хэширования позволяют проверять пароли очень быстро.
В соответствии с рекомендацией OpenSSL использовать более современный алгоритм вместо EVP_BytesToKey
, разработчикам рекомендуется самостоятельно определять ключ и IV с помощью crypto.scrypt()
и использовать crypto.createDecipheriv()
для создания объекта Decipher
.
crypto.createDecipheriv(algorithm, key, iv[, options])
¶
алгоритм
<string>
key
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}iv
{string|ArrayBuffer|Buffer|TypedArray|DataView|null}options
<Object>
stream.transform
options- Возвращает: {Decipher}
Создает и возвращает объект Decipher
, который использует заданный алгоритм
, ключ
и вектор инициализации (iv
).
Аргумент options
управляет поведением потока и является необязательным, за исключением случаев, когда используется шифр в режиме CCM или OCB (например, 'aes-128-ccm'
). В этом случае опция authTagLength
является обязательной и определяет длину тега аутентификации в байтах, см. CCM mode. В режиме GCM опция authTagLength
не требуется, но может быть использована для ограничения принимаемых тегов аутентификации тегами указанной длины. Для chacha20-poly1305
опция authTagLength
по умолчанию равна 16 байтам.
Алгоритм algorithm
зависит от OpenSSL, примеры: aes192
и т. д. В последних выпусках OpenSSL опция openssl list -cipher-algorithms
покажет доступные алгоритмы шифрования.
Ключ key
- это необработанный ключ, используемый алгоритмом
, а iv
- это вектор инициализации. Оба аргумента должны быть строками в кодировке 'utf8
, Buffers, TypedArray
или DataView
. Ключ может быть KeyObject
типа secret
. Если шифру не требуется вектор инициализации, iv
может быть null
.
При передаче строк для key
или iv
, пожалуйста, учитывайте предостережения при использовании строк в качестве входов в криптографические API.
Векторы инициализации должны быть непредсказуемыми и уникальными; в идеале они должны быть криптографически случайными. Они не обязательно должны быть секретными: IV обычно просто добавляются к шифротекстовым сообщениям в незашифрованном виде. Может показаться противоречивым, что что-то должно быть непредсказуемым и уникальным, но не должно быть секретным; помните, что атакующий не должен иметь возможности заранее предсказать, каким будет данный IV.
crypto.createDiffieHellman(prime[, primeEncoding][, generator][, generatorEncoding])
¶
prime
{string|ArrayBuffer|Buffer|TypedArray|DataView}primeEncoding
<string>
кодировка строкиprime
.generator
{number|string|ArrayBuffer|Buffer|TypedArray|DataView} По умолчанию:2
.generatorEncoding
<string>
кодировка строкигенератора
.- Возвращает: {DiffieHellman}
Создает объект обмена ключами DiffieHellman
, используя предоставленный prime
и необязательный определенный генератор
.
Аргумент generator
может быть числом, строкой или Buffer
. Если generator
не указан, используется значение 2
.
Если указано primeEncoding
, ожидается, что prime
будет строкой, в противном случае ожидается Buffer
, TypedArray
или DataView
.
Если указано generatorEncoding
, ожидается, что generator
будет строкой; в противном случае ожидается число, Buffer
, TypedArray
или DataView
.
crypto.createDiffieHellman(primeLength[, generator])
¶
Создает объект обмена ключами DiffieHellman
и генерирует прайм из битов primeLength
, используя необязательный конкретный числовой generator
. Если generator
не указан, используется значение 2
.
crypto.createDiffieHellmanGroup(name)
¶
name
<string>
- Возвращает: {DiffieHellmanGroup}
Псевдоним для crypto.getDiffieHellman()
crypto.createECDH(curveName)
¶
curveName
<string>
- Возвращает: {ECDH}
Создает объект обмена ключами Elliptic Curve Diffie-Hellman (ECDH
), используя предопределенную кривую, заданную строкой curveName
. Используйте crypto.getCurves()
для получения списка доступных имен кривых. В последних выпусках OpenSSL, openssl ecparam -list_curves
также отобразит имя и описание каждой доступной эллиптической кривой.
crypto.createHash(algorithm[, options])
¶
алгоритм
<string>
options
<Object>
stream.transform
options- Возвращает: {Hash}
Создает и возвращает объект Hash
, который может быть использован для генерации хэш-дайджестов с помощью заданного алгоритма
. Необязательный аргумент options
управляет поведением потока. Для хэш-функций XOF, таких как 'shake256'
, опция outputLength
может быть использована для указания желаемой длины выходного потока в байтах.
Параметр algorithm
зависит от доступных алгоритмов, поддерживаемых версией OpenSSL на данной платформе. Примерами являются sha256
, sha512
и т. д. В последних выпусках OpenSSL команда openssl list -digest-algorithms
отобразит доступные алгоритмы дайджеста.
Пример: генерация суммы sha256 для файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
crypto.createHmac(algorithm, key[, options])
¶
алгоритм
<string>
key
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}options
<Object>
stream.transform
optionsencoding
<string>
Строковая кодировка, которую следует использовать, когдаключ
является строкой.
- Возвращает: {Hmac}
Создает и возвращает объект Hmac
, который использует заданный алгоритм
и ключ
. Необязательный аргумент options
управляет поведением потока.
Алгоритм зависит от доступных алгоритмов, поддерживаемых версией OpenSSL на данной платформе. Примеры: 'sha256'
, 'sha512'
и т. д. В последних версиях OpenSSL, openssl list -digest-algorithms
отобразит доступные алгоритмы дайджеста.
Ключ - это ключ HMAC, используемый для генерации криптографического хэша HMAC. Если это KeyObject
, его тип должен быть secret
.
Пример: генерация sha256 HMAC файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
crypto.createPrivateKey(key)
¶
key
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView}key
: {string|ArrayBuffer|Buffer|TypedArray|DataView|Object} Материал ключа, либо в формате PEM, DER, либо JWK.формат
:<string>
. Должен бытьpem
,der
илиjwk
. По умолчанию:'pem'
.type
:<string>
. Должно быть'pkcs1'
,'pkcs8'
или'sec1'
. Этот параметр требуется, только еслиформат
-'der'
и игнорируется в противном случае.passphrase
: {строка | буфер}. Парольная фраза, которую следует использовать для расшифровки.encoding
:<string>
Строковая кодировка, которую следует использовать, когдаключ
является строкой.
- Возвращает: {KeyObject}
Создает и возвращает новый объект ключа, содержащий закрытый ключ. Если key
является строкой или Buffer
, format
принимается равным 'pem'
; в противном случае key
должен быть объектом со свойствами, описанными выше.
Если закрытый ключ зашифрован, необходимо указать пассфразу
. Длина парольной фразы ограничена 1024 байтами.
crypto.createPublicKey(key)
¶
key
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView}key
: {string|ArrayBuffer|Buffer|TypedArray|DataView|Object} Материал ключа, либо в формате PEM, DER, либо JWK.формат
:<string>
. Должен быть'pem
,'der
или'jwk
. По умолчанию:'pem'
.type
:<string>
. Должно быть'pkcs1'
или'spki'
. Этот параметр требуется только еслиформат
-'der'
и игнорируется в противном случае.encoding
<string>
Строковая кодировка, которую следует использовать, когдаключ
является строкой.
- Возвращает: {KeyObject}
Создает и возвращает новый объект ключа, содержащий открытый ключ. Если key
- строка или Buffer
, формат
принимается равным 'pem'
; если key
- KeyObject
с типом 'private'
, открытый ключ будет получен из данного закрытого ключа; в противном случае key
должен быть объектом со свойствами, описанными выше.
Если формат pem
, то ключ
может также быть сертификатом X.509.
Поскольку открытые ключи могут быть получены из закрытых ключей, вместо открытого ключа может быть передан закрытый ключ. В этом случае эта функция ведет себя так же, как если бы была вызвана crypto.createPrivateKey()
, за исключением того, что тип возвращаемого KeyObject
будет 'public'
и что закрытый ключ не может быть извлечен из возвращаемого KeyObject
. Аналогично, если передан KeyObject
с типом 'private'
, будет возвращен новый KeyObject
с типом 'public'
и невозможно будет извлечь закрытый ключ из возвращенного объекта.
crypto.createSecretKey(key[, encoding])
¶
key
{string|ArrayBuffer|Buffer|TypedArray|DataView}encoding
<string>
Кодировка строки, когдаключ
является строкой.- Возвращает: {KeyObject}
Создает и возвращает новый объект key, содержащий секретный ключ для симметричного шифрования или Hmac
.
crypto.createSign(algorithm[, options])
¶
алгоритм
<string>
options
<Object>
stream.Writable
options- Возвращает: {Sign}
Создает и возвращает объект Sign
, использующий заданный алгоритм
. Используйте crypto.getHashes()
для получения имен доступных алгоритмов дайджеста. Необязательный аргумент options
управляет поведением stream.Writable
.
В некоторых случаях экземпляр Sign
может быть создан с использованием имени алгоритма подписи, например 'RSA-SHA256'
, вместо алгоритма дайджеста. В этом случае будет использоваться соответствующий алгоритм подписи. Это работает не для всех алгоритмов подписи, например, 'ecdsa-with-SHA256'
, поэтому лучше всегда использовать имена алгоритмов дайджеста.
crypto.createVerify(algorithm[, options])
¶
алгоритм
<string>
options
<Object>
stream.Writable
options- Возвращает: {Verify}
Создает и возвращает объект Verify
, использующий заданный алгоритм. Используйте crypto.getHashes()
для получения массива имен доступных алгоритмов подписания. Необязательный аргумент options
управляет поведением stream.Writable
.
В некоторых случаях экземпляр Verify
может быть создан с использованием имени алгоритма подписи, например 'RSA-SHA256'
, вместо алгоритма дайджеста. В этом случае будет использоваться соответствующий алгоритм. Это работает не для всех алгоритмов подписи, например, 'ecdsa-with-SHA256'
, поэтому лучше всегда использовать имена алгоритмов дайджеста.
crypto.diffieHellman(options)
¶
Вычисляет секрет Диффи-Хеллмана на основе privateKey
и publicKey
. Оба ключа должны иметь одинаковый asymmetricKeyType
, который должен быть одним из 'dh'
(для Diffie-Hellman), 'ec'
(для ECDH), 'x448'
или 'x25519'
(для ECDH-ES).
crypto.generateKey(type, options, callback)
¶
type
:<string>
. Предполагаемое использование сгенерированного секретного ключа. В настоящее время принимаются значения'hmac'
и'aes'
.options
:<Object>
length
:<number>
Длина бита генерируемого ключа. Это должно быть значение больше 0.- Если
type
имеет значение'hmac'
, минимальная длина равна 8, а максимальная - 231-1. Если значение не кратно 8, сгенерированный ключ будет усечен доMath.floor(length / 8)
. - Если
type
-'aes
, длина должна быть одной из128
,192
или256
.
- Если
callback
:<Function>
err
:<Error>
key
: {KeyObject}
Асинхронно генерирует новый случайный секретный ключ заданной длины
. Тип type
определяет, какие проверки будут выполняться для длины
.
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
crypto.generateKeyPair(type, options, callback)
.¶
type
:<string>
. Должно бытьrsa
,rsa-pss
,dsa
,ec
,ed25519
,ed448
,x25519
,x448
илиdh
.options
:<Object>
modulusLength
:<number>
Размер ключа в битах (RSA, DSA).publicExponent
:<number>
Публичная экспонента (RSA). По умолчанию:0x10001
.hashAlgorithm
:<string>
Имя дайджеста сообщения (RSA-PSS).mgf1HashAlgorithm
:<string>
Имя дайджеста сообщения, используемого MGF1 (RSA-PSS).saltLength
:<number>
Минимальная длина соли в байтах (RSA-PSS).divisorLength
:<number>
Размерq
в битах (DSA).namedCurve
:<string>
Имя кривой, которую следует использовать (EC).prime
:<Buffer>
Параметр prime (DH).primeLength
:<number>
Длина прайма в битах (DH).generator
:<number>
Пользовательский генератор (DH). По умолчанию:2
.groupName
:<string>
Имя группы Диффи-Хеллмана (DH). См.crypto.getDiffieHellman()
.paramEncoding
:<string>
. Должно бытьименованным
илиявным
(EC). По умолчанию:'named'
.publicKeyEncoding
:<Object>
См.keyObject.export()
.privateKeyEncoding
:<Object>
См.keyObject.export()
.
callback
:<Function>
err
:<Error>
publicKey
: {string | Buffer | KeyObject}privateKey
: {string | Buffer | KeyObject}.
Генерирует новую пару асимметричных ключей заданного типа
. В настоящее время поддерживаются RSA, RSA-PSS, DSA, EC, Ed25519, Ed448, X25519, X448 и DH.
Если было указано publicKeyEncoding
или privateKeyEncoding
, эта функция ведет себя так, как если бы для ее результата был вызван keyObject.export()
. В противном случае соответствующая часть ключа возвращается как KeyObject
.
Рекомендуется кодировать открытые ключи как 'spki'
и закрытые ключи как 'pkcs8'
с шифрованием для длительного хранения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
По завершении будет вызван callback
с err
, установленным в undefined
и publicKey
/ privateKey
, представляющими сгенерированную пару ключей.
Если этот метод вызывается как его util.promisify()
версия, он возвращает Promise
для Object
со свойствами publicKey
и privateKey
.
crypto.generateKeyPairSync(type, options)
¶
type
:<string>
. Должно быть'rsa
,'rsa-pss
,'dsa
,'ec
,'ed25519
,'ed448
,'x25519
,'x448
или'dh
.options
:<Object>
modulusLength
:<number>
Размер ключа в битах (RSA, DSA).publicExponent
:<number>
Публичная экспонента (RSA). По умолчанию:0x10001
.hashAlgorithm
:<string>
Имя дайджеста сообщения (RSA-PSS).mgf1HashAlgorithm
:<string>
Имя дайджеста сообщения, используемого MGF1 (RSA-PSS).saltLength
:<number>
Минимальная длина соли в байтах (RSA-PSS).divisorLength
:<number>
Размерq
в битах (DSA).namedCurve
:<string>
Имя кривой, которую следует использовать (EC).prime
:<Buffer>
Параметр prime (DH).primeLength
:<number>
Длина прайма в битах (DH).generator
:<number>
Пользовательский генератор (DH). По умолчанию:2
.groupName
:<string>
Имя группы Диффи-Хеллмана (DH). См.crypto.getDiffieHellman()
.paramEncoding
:<string>
. Должно бытьименованным
илиявным
(EC). По умолчанию:'named'
.publicKeyEncoding
:<Object>
См.keyObject.export()
.privateKeyEncoding
:<Object>
См.keyObject.export()
.
- Возвращает:
<Object>
publicKey
: {string | Buffer | KeyObject}privateKey
: {string | Buffer | KeyObject}.
Генерирует новую пару асимметричных ключей заданного типа
. В настоящее время поддерживаются RSA, RSA-PSS, DSA, EC, Ed25519, Ed448, X25519, X448 и DH.
Если было указано publicKeyEncoding
или privateKeyEncoding
, эта функция ведет себя так, как если бы для ее результата был вызван keyObject.export()
. В противном случае соответствующая часть ключа возвращается как KeyObject
.
При кодировании открытых ключей рекомендуется использовать 'spki'
. При кодировании закрытых ключей рекомендуется использовать 'pkcs8'
с сильной парольной фразой и хранить парольную фразу в тайне.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Возвращаемое значение { publicKey, privateKey }
представляет собой сгенерированную пару ключей. Если выбрана кодировка PEM, то соответствующий ключ будет строкой, в противном случае это будет буфер, содержащий данные, закодированные в формате DER.
crypto.generateKeySync(type, options)
¶
type
:<string>
. Предполагаемое использование сгенерированного секретного ключа. В настоящее время принимаются значения'hmac'
и'aes'
.options
:<Object>
length
:<number>
Длина бита генерируемого ключа.- Если
type
-'hmac'
, минимальная длина равна 8, а максимальная - 231-1. Если значение не кратно 8, сгенерированный ключ будет усечен доMath.floor(length / 8)
. - Если
type
-aes
, длина должна быть одной из128
,192
или256
.
- Если
- Возвращает: {KeyObject}
Синхронно генерирует новый случайный секретный ключ заданной длины
. Тип type
определяет, какие проверки будут выполняться для длины
.
1 2 3 4 |
|
1 2 3 4 |
|
crypto.generatePrime(size[, options[, callback]])
¶
size
<number>
Размер (в битах) простого числа для генерации.options
<Object>
callback
<Function>
err
<Error>
prime
{ArrayBuffer|bigint}
Генерирует псевдослучайное простое число размером size
бит.
Если options.safe
равно true
, то прайм будет безопасным праймом - то есть (прайм - 1) / 2
также будет праймом.
Параметры options.add
и options.rem
могут быть использованы для обеспечения дополнительных требований, например, для Диффи-Хеллмана:
- Если
options.add
иoptions.rem
оба заданы, то прайм будет удовлетворять условию, чтоprime % add = rem
. - Если установлено только
options.add
иoptions.safe
неtrue
, то прайм будет удовлетворять условию, чтоprime % add = 1
. - Если задано только
options.add
иoptions.safe
имеет значениеtrue
, то вместо этого прайм будет удовлетворять условию, чтоprime % add = 3
. Это необходимо, посколькуprime % add = 1
дляoptions.add > 2
противоречит условию, навязанномуoptions.safe
. options.rem
игнорируется, еслиoptions.add
не указан.
И options.add
, и options.rem
должны быть закодированы как big-endian последовательности, если они заданы как ArrayBuffer
, SharedArrayBuffer
, TypedArray
, Buffer
или DataView
.
По умолчанию прайм кодируется как big-endian последовательность октетов в <ArrayBuffer>
. Если опция bigint
имеет значение true
, то предоставляется <bigint>
.
crypto.generatePrimeSync(size[, options])
¶
size
<number>
Размер (в битах) генерируемого прайма.options
<Object>
- Возвращает: {ArrayBuffer|bigint}
Генерирует псевдослучайное простое число размером size
бит.
Если options.safe
равно true
, то прайм будет безопасным праймом - то есть, (прайм - 1) / 2
также будет праймом.
Параметры options.add
и options.rem
могут быть использованы для обеспечения дополнительных требований, например, для Диффи-Хеллмана:
- Если
options.add
иoptions.rem
оба заданы, то прайм будет удовлетворять условию, чтоprime % add = rem
. - Если установлено только
options.add
иoptions.safe
неtrue
, то прайм будет удовлетворять условию, чтоprime % add = 1
. - Если задано только
options.add
иoptions.safe
имеет значениеtrue
, то вместо этого прайм будет удовлетворять условию, чтоprime % add = 3
. Это необходимо, посколькуprime % add = 1
дляoptions.add > 2
противоречит условию, навязанномуoptions.safe
. options.rem
игнорируется, еслиoptions.add
не указан.
И options.add
, и options.rem
должны быть закодированы как big-endian последовательности, если они заданы как ArrayBuffer
, SharedArrayBuffer
, TypedArray
, Buffer
или DataView
.
По умолчанию прайм кодируется как big-endian последовательность октетов в <ArrayBuffer>
. Если опция bigint
имеет значение true
, то предоставляется <bigint>
.
crypto.getCipherInfo(nameOrNid[, options])
¶
nameOrNid
: {string|number} Имя или nid шифра для запроса.options
:<Object>
- Возвращает:
<Object>
name
<string>
Имя шифраnid
<number>
nid шифраblockSize
<number>
Размер блока шифра в байтах. Это свойство опускается, еслиmode
имеет значение'stream'
.ivLength
<number>
Ожидаемая или стандартная длина вектора инициализации в байтах. Это свойство опускается, если шифр не использует вектор инициализации.keyLength
<number>
Ожидаемая длина ключа или длина ключа по умолчанию в байтах.mode
<string>
Режим шифра. Один из'cbc'
,'ccm'
,'cfb'
,'ctr'
,'ecb'
,'gcm'
,'ocb'
,'ofb'
,'stream'
,'wrap'
,'xts'
.
Возвращает информацию о заданном шифре.
Некоторые шифры принимают ключи переменной длины и векторы инициализации. По умолчанию метод crypto.getCipherInfo()
возвращает значения по умолчанию для этих шифров. Чтобы проверить, приемлема ли заданная длина ключа или длина iv для данного шифра, используйте опции keyLength
и ivLength
. Если заданные значения неприемлемы, будет возвращено значение undefined
.
crypto.getCiphers()
¶
- Возвращает:
<string[]>
Массив с именами поддерживаемых алгоритмов шифрования.
1 2 3 |
|
1 2 3 |
|
crypto.getCurves()
¶
- Возвращает:
<string[]>
Массив с именами поддерживаемых эллиптических кривых.
1 2 3 |
|
1 2 3 |
|
crypto.getDiffieHellman(groupName)
¶
groupName
<string>
- Возвращает: {DiffieHellmanGroup}
Создает предопределенный объект обмена ключами DiffieHellmanGroup
. Поддерживаемые группы перечислены в документации по DiffieHellmanGroup
.
Возвращаемый объект имитирует интерфейс объектов, создаваемых crypto.createDiffieHellman()
, но не позволяет изменять ключи (например, с помощью diffieHellman.setPublicKey()
). Преимущество использования этого метода в том, что сторонам не нужно предварительно генерировать групповой модуль и обмениваться им, что экономит процессорное и коммуникационное время.
Пример (получение общего секрета):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
crypto.getFips()
¶
- Возвращает:
<number>
1
, если и только если в настоящее время используется FIPS-совместимый криптопровайдер,0
в противном случае. В будущем выпуске semver-major тип возврата этого API может быть изменен на<boolean>
.
crypto.getHashes()
¶
- Возвращает:
<string[]>
Массив имен поддерживаемых алгоритмов хэширования, например,'RSA-SHA256'
. Хеш-алгоритмы также называют алгоритмами "дайджеста".
1 2 3 |
|
1 2 3 |
|
crypto.getRandomValues(typedArray)
¶
typedArray
{Buffer|TypedArray|DataView|ArrayBuffer}- Возвращает: {Buffer|TypedArray|DataView|ArrayBuffer} Возвращает
typedArray
.
Удобный псевдоним для crypto.webcrypto.getRandomValues()
. Эта реализация не соответствует спецификации Web Crypto, для написания веб-совместимого кода используйте crypto.webcrypto.getRandomValues()
.
crypto.hkdf(digest, ikm, salt, info, keylen, callback)
¶
digest
<string>
Используемый алгоритм дайджеста.ikm
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject} Входной ключевой материал. Должен быть указан, но может иметь нулевую длину.salt
{string|ArrayBuffer|Buffer|TypedArray|DataView} Значение соли. Должно быть указано, но может иметь нулевую длину.info
{string|ArrayBuffer|Buffer|TypedArray|DataView} Дополнительное информационное значение. Должно быть указано, но может иметь нулевую длину и не может быть больше 1024 байт.keylen
<number>
Длина генерируемого ключа. Должна быть больше 0. Максимально допустимое значение равно255
, умноженное на количество байт, выдаваемых выбранной функцией дайджеста (например,sha512
генерирует 64-байтовые хэши, что делает максимальный выход HKDF 16320 байт).callback
<Function>
err
<Error>
derivedKey
<ArrayBuffer>
HKDF - это простая функция выведения ключей, определенная в RFC 5869. Заданные ikm
, salt
и info
используются вместе с digest
для получения ключа длиной keylen
байт.
Поставленная функция callback
вызывается с двумя аргументами: err
и derivedKey
. Если при выведении ключа произошла ошибка, будет установлено значение err
, в противном случае err
будет равно null
. Успешно сгенерированный derivedKey
будет передан в обратный вызов как <ArrayBuffer>
. Если какой-либо из входных аргументов содержит недопустимые значения или типы, будет выдана ошибка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
crypto.hkdfSync(digest, ikm, salt, info, keylen)
¶
digest
<string>
Используемый алгоритм дайджеста.ikm
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject} Входной ключевой материал. Должен быть указан, но может иметь нулевую длину.salt
{string|ArrayBuffer|Buffer|TypedArray|DataView} Значение соли. Должно быть указано, но может иметь нулевую длину.info
{string|ArrayBuffer|Buffer|TypedArray|DataView} Дополнительное информационное значение. Должно быть указано, но может иметь нулевую длину и не может быть больше 1024 байт.keylen
<number>
Длина генерируемого ключа. Должна быть больше 0. Максимально допустимое значение равно255
, умноженное на количество байт, генерируемых выбранной функцией дайджеста (например,sha512
генерирует 64-байтовые хэши, что делает максимальный выход HKDF 16320 байт).- Возвращает:
<ArrayBuffer>
.
Предоставляет синхронную функцию выведения ключей HKDF, как определено в RFC 5869. Заданные ikm
, salt
и info
используются вместе с digest
для получения ключа длиной keylen
байт.
Успешно сгенерированный derivedKey
будет возвращен в виде <ArrayBuffer>
.
Если в качестве входных аргументов указаны недопустимые значения или типы, или если производный ключ не может быть сгенерирован, будет выдана ошибка.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)
¶
password
{string|ArrayBuffer|Buffer|TypedArray|DataView}соль
{string|ArrayBuffer|Buffer|TypedArray|DataView}iterations
<number>
keylen
<number>
digest
<string>
callback
<Function>
err
{ошибка}derivedKey
<Buffer>
Обеспечивает асинхронную реализацию Password-Based Key Derivation Function 2 (PBKDF2). Выбранный алгоритм дайджеста HMAC, указанный в digest
, применяется для получения ключа требуемой длины байта (keylen
) из password
, alt
и iterations
.
Поставленная функция callback
вызывается с двумя аргументами: err
и derivedKey
. Если при создании ключа произошла ошибка, то err
будет установлен; в противном случае err
будет равен null
. По умолчанию успешно сгенерированный derivedKey
будет передан обратному вызову как Buffer
. Если в любом из входных аргументов указаны недопустимые значения или типы, будет выдана ошибка.
Аргумент iterations
должен быть числом, установленным как можно выше. Чем больше число итераций, тем надежнее будет производный ключ, но на выполнение потребуется больше времени.
Соль" должна быть настолько уникальной, насколько это возможно. Рекомендуется, чтобы соль была случайной и имела длину не менее 16 байт. Подробности см. в NIST SP 800-132.
При передаче строк для password
или salt
, пожалуйста, учитывайте предостережения при использовании строк в качестве входных данных для криптографических API.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Свойство crypto.DEFAULT_ENCODING
можно использовать для изменения способа передачи derivedKey
в обратный вызов. Однако это свойство было устаревшим, и его использования следует избегать.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Массив поддерживаемых дайджест-функций можно получить с помощью crypto.getHashes()
.
Этот API использует пул потоков libuv, что может иметь неожиданные и негативные последствия для производительности некоторых приложений; смотрите документацию UV_THREADPOOL_SIZE
для получения дополнительной информации.
crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)
¶
пароль
<string>
|<Buffer>
|<TypedArray>
|<DataView>
соль
<string>
|<Buffer>
|<TypedArray>
|<DataView>
iterations
<number>
keylen
<number>
digest
<string>
- Возвращает:
<Buffer>
Предоставляет синхронную реализацию Password-Based Key Derivation Function 2 (PBKDF2). Выбранный алгоритм дайджеста HMAC, указанный в digest
, применяется для получения ключа запрашиваемой длины байта (keylen
) из password
, alt
и iterations
.
Если произойдет ошибка, будет выдано сообщение Error
, в противном случае полученный ключ будет возвращен в виде буфера
.
Аргумент iterations
должен быть числом, установленным как можно выше. Чем больше число итераций, тем надежнее будет полученный ключ, но на это потребуется больше времени.
Соль" должна быть настолько уникальной, насколько это возможно. Рекомендуется, чтобы соль была случайной и имела длину не менее 16 байт. Подробности см. в NIST SP 800-132.
При передаче строк для password
или salt
, пожалуйста, учитывайте предостережения при использовании строк в качестве входных данных для криптографических API.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Свойство crypto.DEFAULT_ENCODING
можно использовать для изменения способа возврата derivedKey
. Однако это свойство устарело, и его использования следует избегать.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Массив поддерживаемых функций дайджеста можно получить с помощью crypto.getHashes()
.
crypto.privateDecrypt(privateKey, buffer)
¶
privateKey
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}oaepHash
<string>
Хэш-функция, используемая для OAEP padding и MGF1. По умолчанию:'sha1'
.oaepLabel
{string|ArrayBuffer|Buffer|TypedArray|DataView} Метка, которую следует использовать для OAEP-подкладки. Если не указано, метка не используется.padding
{crypto.constants} Необязательное значение набивки, определенное вcrypto.constants
, которое может быть:crypto.constants.RSA_NO_PADDING
,crypto.constants.RSA_PKCS1_PADDING
илиcrypto.constants.RSA_PKCS1_OAEP_PADDING
.
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}- Возвращает:
<Buffer>
Новыйбуфер
с расшифрованным содержимым.
Расшифровывает buffer
с помощью privateKey
. Буфер
был ранее зашифрован с помощью соответствующего открытого ключа, например, с помощью crypto.publicEncrypt()
.
Если privateKey
не является KeyObject
, эта функция ведет себя так, как если бы privateKey
был передан в crypto.createPrivateKey()
. Если это объект, может быть передано свойство padding
. В противном случае эта функция использует RSA_PKCS1_OAEP_PADDING
.
crypto.privateEncrypt(privateKey, buffer)
¶
privateKey
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}key
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey} Закрытый ключ в кодировке PEM.passphrase
{string|ArrayBuffer|Buffer|TypedArray|DataView} Необязательная ключевая фраза для закрытого ключа.padding
{crypto.constants} Необязательное значение прокладки, определенное вcrypto.constants
, которое может быть:crypto.constants.RSA_NO_PADDING
илиcrypto.constants.RSA_PKCS1_PADDING
.encoding
<string>
Строковая кодировка, которую следует использовать, когдабуфер
,ключ
илипассфраза
являются строками.
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}- Возвращает:
<Buffer>
Новыйбуфер
с зашифрованным содержимым.
Шифрует buffer
с помощью privateKey
. Возвращенные данные можно расшифровать с помощью соответствующего открытого ключа, например, используя crypto.publicDecrypt()
.
Если privateKey
не является KeyObject
, эта функция ведет себя так, как если бы privateKey
был передан в crypto.createPrivateKey()
. Если это объект, может быть передано свойство padding
. В противном случае эта функция использует RSA_PKCS1_PADDING
.
crypto.publicDecrypt(key, buffer)
¶
ключ
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}passphrase
{string|ArrayBuffer|Buffer|TypedArray|DataView} Необязательная ключевая фраза для закрытого ключа.padding
{crypto.constants} Необязательное значение прокладки, определенное вcrypto.constants
, которое может быть:crypto.constants.RSA_NO_PADDING
илиcrypto.constants.RSA_PKCS1_PADDING
.encoding
<string>
Строковая кодировка, которую следует использовать, когдабуфер
,ключ
илипассфраза
являются строками.
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}- Возвращает:
<Buffer>
Новыйбуфер
с расшифрованным содержимым.
Расшифровывает buffer
с помощью key
.buffer
был ранее зашифрован с помощью соответствующего закрытого ключа, например, с помощью crypto.privateEncrypt()
.
Если key
не является KeyObject
, эта функция ведет себя так, как если бы key
был передан в crypto.createPublicKey()
. Если это объект, может быть передано свойство padding
. В противном случае эта функция использует RSA_PKCS1_PADDING
.
Поскольку открытые ключи RSA могут быть получены из закрытых ключей, вместо открытого ключа может быть передан закрытый ключ.
crypto.publicEncrypt(key, buffer)
¶
key
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}ключ
{string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey} Открытый или закрытый ключ в кодировке PEM, {KeyObject} или {CryptoKey}.oaepHash
<string>
Хэш-функция, используемая для OAEP padding и MGF1. По умолчанию:'sha1'
.oaepLabel
{string|ArrayBuffer|Buffer|TypedArray|DataView} Метка, которую следует использовать для OAEP-подкладки. Если не указано, метка не используется.passphrase
{string|ArrayBuffer|Buffer|TypedArray|DataView} Необязательная ключевая фраза для закрытого ключа.padding
{crypto.constants} Необязательное значение прокладки, определенное вcrypto.constants
, которое может быть:crypto.constants.RSA_NO_PADDING
,crypto.constants.RSA_PKCS1_PADDING
илиcrypto.constants.RSA_PKCS1_OAEP_PADDING
.encoding
<string>
Строковая кодировка, которую следует использовать, когдабуфер
,ключ
,oaepLabel
илиpassphrase
являются строками.
buffer
{string|ArrayBuffer|Buffer|TypedArray|DataView}- Возвращает:
<Buffer>
Новыйбуфер
с зашифрованным содержимым.
Шифрует содержимое buffer
с помощью key
и возвращает новый Buffer
с зашифрованным содержимым. Возвращенные данные можно расшифровать с помощью соответствующего закрытого ключа, например, используя crypto.privateDecrypt()
.
Если key
не является KeyObject
, эта функция ведет себя так, как если бы key
был передан в crypto.createPublicKey()
. Если это объект, может быть передано свойство padding
. В противном случае эта функция использует RSA_PKCS1_OAEP_PADDING
.
Поскольку открытые ключи RSA могут быть получены из закрытых ключей, вместо открытого ключа может быть передан закрытый ключ.
crypto.randomBytes(size[, callback])
¶
size
<number>
Количество байт для генерации.size
не должно быть больше, чем2**31 - 1
.callback
<Function>
- Возвращает:
<Buffer>
, если функцияcallback
не предоставлена.
Генерирует криптографически сильные псевдослучайные данные. Аргумент size
представляет собой число, указывающее количество байт для генерации.
Если указана функция callback
, байты генерируются асинхронно, а функция callback
вызывается с двумя аргументами: err
и buf
. Если произошла ошибка, то err
будет объектом Error
, в противном случае - null
. Аргумент buf
представляет собой буфер
, содержащий сгенерированные байты.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Если функция callback
не указана, случайные байты генерируются синхронно и возвращаются в виде буфера
. При возникновении проблем с генерацией байтов будет выдана ошибка.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Метод crypto.randomBytes()
не завершится, пока не будет получено достаточное количество энтропии. Обычно это не должно занимать более нескольких миллисекунд. Единственное время, когда генерация случайных байтов может блокироваться на более длительный период времени, это сразу после загрузки, когда вся система еще не имеет достаточного количества энтропии.
Этот API использует пул потоков libuv, что может иметь неожиданные и негативные последствия для производительности некоторых приложений; смотрите документацию UV_THREADPOOL_SIZE
для получения дополнительной информации.
Асинхронная версия crypto.randomBytes()
выполняется за один запрос к пулу потоков. Чтобы минимизировать изменение длины задачи пула потоков, разделяйте большие запросы randomBytes
, когда это делается в рамках выполнения запроса клиента.
crypto.randomFillSync(buffer[, offset][, size])
¶
buffer
{ArrayBuffer|Buffer|TypedArray|DataView} Должен быть предоставлен. Размер предоставляемогобуфера
не должен быть больше, чем2**31 - 1
.offset
<number>
По умолчанию:0
size
<number>
По умолчанию:buffer.length - offset
.size
не должен быть больше, чем2**31 - 1
.- Возвращает: {ArrayBuffer|Buffer|TypedArray|DataView} Объект, переданный в качестве аргумента
buffer
.
Синхронная версия crypto.randomFill()
.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
В качестве буфера
может быть передан любой экземпляр ArrayBuffer
, TypedArray
или DataView
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
crypto.randomFill(buffer[, offset][, size], callback)
¶
buffer
{ArrayBuffer|Buffer|TypedArray|DataView} Должен быть предоставлен. Размер предоставляемогобуфера
не должен быть больше, чем2**31 - 1
.offset
<number>
По умолчанию:0
size
<number>
По умолчанию:buffer.length - offset
.size
не должно быть больше, чем2**31 - 1
.callback
<Function>
function(err, buf) {}
.
Эта функция аналогична crypto.randomBytes()
, но требует, чтобы первым аргументом был буфер
, который будет заполнен. Она также требует, чтобы был передан обратный вызов.
Если функция callback
не передана, будет выдана ошибка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Любой экземпляр ArrayBuffer
, TypedArray
или DataView
может быть передан в качестве buffer
.
Хотя сюда входят экземпляры Float32Array
и Float64Array
, эта функция не должна использоваться для генерации случайных чисел с плавающей точкой. Результат может содержать +Infinity
, -Infinity
и NaN
, и даже если массив содержит только конечные числа, они не взяты из равномерного случайного распределения и не имеют значимых нижних или верхних границ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Этот API использует пул потоков libuv, что может иметь неожиданные и негативные последствия для производительности некоторых приложений; смотрите документацию UV_THREADPOOL_SIZE
для получения дополнительной информации.
Асинхронная версия crypto.randomFill()
выполняется за один запрос к пулу потоков. Чтобы минимизировать изменение длины задачи пула потоков, разделяйте большие запросы randomFill
, если они выполняются в рамках выполнения запроса клиента.
crypto.randomInt([min, ]max[, callback])
¶
min
<integer>
Начало произвольного диапазона (включительно). По умолчанию:0
.max
<integer>
Конец случайного диапазона (включительно).callback
<Function>
function(err, n) {}
.
Возвращает случайное целое число n
, такое, что min <= n < max
. Эта реализация позволяет избежать modulo bias.
Диапазон (max - min
) должен быть меньше 248. min
и max
должны быть безопасными целыми числами.
Если функция callback
не предоставлена, случайное целое генерируется синхронно.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 |
|
1 2 3 4 5 |
|
crypto.randomUUID([options])
¶
options
<Object>
disableEntropyCache
<boolean>
По умолчанию, для повышения производительности, Node.js генерирует и кэширует достаточно случайных данных для генерации до 128 случайных UUID. Чтобы генерировать UUID без использования кэша, установитеdisableEntropyCache
вtrue
. По умолчанию:false
.
- Возвращает:
<string>
Генерирует случайный RFC 4122 UUID версии 4. UUID генерируется с помощью криптографического генератора псевдослучайных чисел.
crypto.scrypt(password, salt, keylen[, options], callback)
¶
пароль
{string|ArrayBuffer|Buffer|TypedArray|DataView}соль
{string|ArrayBuffer|Buffer|TypedArray|DataView}keylen
<number>
options
<Object>
cost
<number>
Параметр стоимости процессора/памяти. Должен быть на целых два больше единицы. По умолчанию:16384
.blockSize
<number>
Параметр размера блока. По умолчанию:8
.parallelization
<number>
Параметр распараллеливания. По умолчанию:1
.N
<number>
Псевдоним дляcost
. Может быть указан только один из них.r
<number>
Псевдоним дляblockSize
. Может быть указано только одно из обоих.p
<number>
Псевдоним дляраспараллеливания
. Может быть указано только одно из обоих значений.maxmem
<number>
Верхняя граница памяти. Ошибкой будет, если (приблизительно)128 * N * r > maxmem
. По умолчанию:32 * 1024 * 1024
.
callback
<Function>
Предоставляет асинхронную реализацию scrypt. Scrypt - это функция получения ключа на основе пароля, которая спроектирована так, чтобы быть дорогой в вычислительном плане и по памяти, чтобы сделать атаки "грубой силы" невыгодными.
Соль" должна быть настолько уникальной, насколько это возможно. Рекомендуется, чтобы соль была случайной и имела длину не менее 16 байт. Подробности см. в NIST SP 800-132.
При передаче строк для password
или salt
следует учитывать предостережения при использовании строк в качестве входных данных для криптографических API.
Функция callback
вызывается с двумя аргументами: err
и derivedKey
. err
- это объект исключения, если выведение ключа не удалось, в противном случае err
- это null
. derivedKey
передается обратному вызову как Buffer
.
Исключение возникает, если любой из входных аргументов содержит недопустимые значения или типы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
crypto.scryptSync(password, salt, keylen[, options])
¶
пароль
<string>
|<Buffer>
|<TypedArray>
|<DataView>
соль
<string>
|<Buffer>
|<TypedArray>
|<DataView>
keylen
<number>
options
<Object>
cost
<number>
Параметр стоимости процессора/памяти. Должен быть на целых два больше единицы. По умолчанию:16384
.blockSize
<number>
Параметр размера блока. По умолчанию:8
.parallelization
<number>
Параметр распараллеливания. По умолчанию:1
.N
<number>
Псевдоним дляcost
. Может быть указан только один из них.r
<number>
Псевдоним дляblockSize
. Может быть указано только одно из обоих.p
<number>
Псевдоним дляраспараллеливания
. Может быть указано только одно из обоих значений.maxmem
<number>
Верхняя граница памяти. Ошибкой будет, если (приблизительно)128 * N * r > maxmem
. По умолчанию:32 * 1024 * 1024
.
- Возвращает:
<Buffer>
Предоставляет синхронную реализацию scrypt. Scrypt - это функция получения ключа на основе пароля, которая спроектирована так, чтобы быть дорогой в вычислительном плане и по памяти, чтобы сделать атаки "грубой силы" невыгодными.
Соль" должна быть настолько уникальной, насколько это возможно. Рекомендуется, чтобы соль была случайной и имела длину не менее 16 байт. Подробности см. в NIST SP 800-132.
При передаче строк для password
или salt
следует учитывать предостережения при использовании строк в качестве входов в криптографические API.
При неудачном выводе ключа возникает исключение, в противном случае полученный ключ возвращается как буфер
.
Исключение возникает, если в любом из входных аргументов указаны недопустимые значения или типы.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
crypto.secureHeapUsed()
.¶
- Возвращает:
<Object>
total
<number>
Общий размер выделенной безопасной кучи, указанный с помощью флага командной строки--secure-heap=n
.min
<number>
Минимальное выделение из безопасной кучи, как указано с помощью флага командной строки--secure-heap-min
.used
<number>
Общее количество байт, выделенных в данный момент из безопасной кучи.utilization
<number>
Рассчитанное отношениеиспользованных
кобщему количеству
выделенных байт.
crypto.setEngine(engine[, flags])
¶
двигатель
<string>
flags
{crypto.constants} По умолчанию:crypto.constants.ENGINE_METHOD_ALL
.
Загружает и устанавливает engine
для некоторых или всех функций OpenSSL (выбранных флагами).
engine
может быть либо идентификатором, либо путем к общей библиотеке движка.
Необязательный аргумент flags
по умолчанию использует ENGINE_METHOD_ALL
. flags
- это битовое поле, принимающее один из следующих флагов (определенных в crypto.constants
) или их смесь:
crypto.constants.ENGINE_METHOD_RSA
crypto.constants.ENGINE_METHOD_DSA
crypto.constants.ENGINE_METHOD_DH
crypto.constants.ENGINE_METHOD_RAND
crypto.constants.ENGINE_METHOD_EC
crypto.constants.ENGINE_METHOD_CIPHERS
crypto.constants.ENGINE_METHOD_DIGESTS
crypto.constants.ENGINE_METHOD_PKEY_METHS
crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS
crypto.constants.ENGINE_METHOD_ALL
crypto.constants.ENGINE_METHOD_NONE
crypto.setFips(bool)
¶
bool
<boolean>
true
для включения режима FIPS.
Включает FIPS-совместимый криптопровайдер в сборке Node.js с поддержкой FIPS. Выбрасывает ошибку, если режим FIPS недоступен.
crypto.sign(algorithm, data, key[, callback])
¶
алгоритм
{string | null | undefined}данные
{ArrayBuffer|Buffer|TypedArray|DataView}key
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}callback
<Function>
- Возвращает:
<Buffer>
, если функцияcallback
не предоставлена.
Вычисляет и возвращает подпись для data
, используя заданный закрытый ключ и алгоритм. Если algorithm
равен null
или undefined
, то алгоритм зависит от типа ключа (особенно Ed25519 и Ed448).
Если key
не является KeyObject
, эта функция ведет себя так, как если бы key
был передан в crypto.createPrivateKey()
. Если это объект, могут быть переданы следующие дополнительные свойства:
-
dsaEncoding
<string>
Для DSA и ECDSA этот параметр определяет формат генерируемой подписи. Он может быть одним из следующих:'der
(по умолчанию): DER-кодирование ASN.1 структуры подписи в кодировке(r, s)
.'ieee-p1363'
: Формат подписиr || s
, предложенный в IEEE-P1363.
-
padding
<integer>
Необязательное значение прокладки для RSA, одно из следующих:crypto.constants.RSA_PKCS1_PADDING
(по умолчанию)crypto.constants.RSA_PKCS1_PSS_PADDING
RSA_PKCS1_PSS_PADDING
будет использовать MGF1 с той же хэш-функцией, которая используется для подписи сообщения, как указано в разделе 3.1 RFC 4055. -
saltLength
<integer>
Длина соли для случая, когда используетсяRSA_PKCS1_PSS_PADDING
. Специальное значениеcrypto.constants.RSA_PSS_SALTLEN_DIGEST
устанавливает длину соли в размер дайджеста,crypto.constants.RSA_PSS_SALTLEN_MAX_SIGN
(по умолчанию) - в максимально допустимое значение.
Если указана функция callback
, эта функция использует пул потоков libuv.
crypto.subtle
¶
- Тип: {SubtleCrypto}
Удобный псевдоним для crypto.webcrypto.subtle
.
crypto.timingSafeEqual(a, b)
¶
a
{ArrayBuffer|Buffer|TypedArray|DataView}b
{ArrayBuffer|Buffer|TypedArray|DataView}- Возвращает:
<boolean>
Эта функция сравнивает базовые байты, представляющие заданные экземпляры ArrayBuffer
, TypedArray
или DataView
, используя алгоритм постоянного времени.
Эта функция не передает информацию о времени, которая позволила бы злоумышленнику угадать одно из значений. Она подходит для сравнения дайджестов HMAC или секретных значений, таких как аутентификационные cookies или capability urls.
a
и b
должны быть Buffer
, TypedArray
или DataView
, и они должны иметь одинаковую длину байта. Если a
и b
имеют разную длину байта, будет выдана ошибка.
Если хотя бы один из a
и b
является TypedArray
с более чем одним байтом на запись, например Uint16Array
, результат будет вычислен с использованием порядка байтов платформы.
Когда оба входа являются Float32Array
или Float64Array
, эта функция может вернуть неожиданные результаты из-за кодировки IEEE 754 для чисел с плавающей точкой. В частности, ни x === y
, ни Object.is(x, y)
не означают, что байтовые представления двух чисел с плавающей точкой x
и y
равны.
Использование crypto.timingSafeEqual
не гарантирует, что окружающий код безопасен по времени. Следует позаботиться о том, чтобы окружающий код не создавал уязвимостей во времени.
crypto.verify(algorithm, data, key, signature[, callback])
¶
алгоритм
{string|null|undefined}данные
{ArrayBuffer| Buffer|TypedArray|DataView}ключ
{Object|string|ArrayBuffer|Buffer|TypedArray|DataView|KeyObject|CryptoKey}signature
{ArrayBuffer|Buffer|TypedArray|DataView}callback
<Function>
- Возвращает:
<boolean>
true
илиfalse
в зависимости от достоверности подписи для данных и открытого ключа, если функцияcallback
не предоставлена.
Проверяет заданную подпись для данных
, используя заданный ключ и алгоритм. Если algorithm
равен null
или undefined
, то алгоритм зависит от типа ключа (особенно Ed25519 и Ed448).
Если key
не является KeyObject
, эта функция ведет себя так, как если бы key
был передан в crypto.createPublicKey()
. Если это объект, могут быть переданы следующие дополнительные свойства:
-
dsaEncoding
<string>
Для DSA и ECDSA этот параметр определяет формат подписи. Он может быть одним из следующих:'der
(по умолчанию): DER-кодирование ASN.1 структуры подписи в кодировке(r, s)
.'ieee-p1363'
: Формат подписиr || s
, предложенный в IEEE-P1363.
-
padding
<integer>
Необязательное значение прокладки для RSA, одно из следующих:crypto.constants.RSA_PKCS1_PADDING
(по умолчанию)crypto.constants.RSA_PKCS1_PSS_PADDING
RSA_PKCS1_PSS_PADDING
будет использовать MGF1 с той же хэш-функцией, которая используется для подписи сообщения, как указано в разделе 3.1 RFC 4055. -
saltLength
<integer>
Длина соли для случая, когда используетсяRSA_PKCS1_PSS_PADDING
. Специальное значениеcrypto.constants.RSA_PSS_SALTLEN_DIGEST
устанавливает длину соли в размер дайджеста,crypto.constants.RSA_PSS_SALTLEN_MAX_SIGN
(по умолчанию) - в максимально допустимое значение.
Аргумент signature
- это ранее вычисленная подпись для данных
.
Поскольку открытые ключи могут быть получены из закрытых ключей, для key
может быть передан как закрытый, так и открытый ключ.
Если указана функция callback
, эта функция использует пул потоков libuv.
crypto.webcrypto
¶
Тип: {Crypto} Реализация стандарта Web Crypto API.
Подробности см. в документации Web Crypto API.
Примечания¶
Использование строк в качестве входов в криптографические API¶
По историческим причинам многие криптографические API, предоставляемые Node.js, принимают строки в качестве входных данных, где основной криптографический алгоритм работает с последовательностями байтов. К таким экземплярам относятся открытые тексты, шифротексты, симметричные ключи, векторы инициализации, парольные фразы, соли, метки аутентификации и дополнительные аутентифицированные данные.
При передаче строк в криптографические API следует учитывать следующие факторы.
-
Не все последовательности байтов являются допустимыми строками UTF-8. Поэтому, когда из строки получается последовательность байтов длиной
n
, ее энтропия обычно ниже, чем энтропия случайной или псевдослучайной последовательности байтов длинойn
. Например, из строки UTF-8 не получится последовательность байтовc0 af
. Секретные ключи должны быть почти исключительно случайными или псевдослучайными последовательностями байтов. -
Аналогично, при преобразовании случайных или псевдослучайных последовательностей байтов в строки UTF-8, последовательности, не представляющие допустимые кодовые точки, могут быть заменены символом замены Unicode (
U+FFFD
). Поэтому байтовое представление результирующей строки Unicode может быть не равно последовательности байтов, из которой она была создана.1 2 3 4 5 6 7 8 9 10
const original = [0xc0, 0xaf]; const bytesAsString = Buffer.from(original).toString( 'utf8' ); const stringAsBytes = Buffer.from( bytesAsString, 'utf8' ); console.log(stringAsBytes); // Печатает '<Буфер ef bf bd ef bf bd>'.
Выходы шифров, хэш-функций, алгоритмов подписи и функций получения ключей представляют собой псевдослучайные последовательности байтов и не должны использоваться как строки Unicode.
-
Когда строки получаются из пользовательского ввода, некоторые символы Unicode могут быть представлены несколькими эквивалентными способами, которые приводят к различным последовательностям байтов. Например, при передаче парольной фразы пользователя функции выведения ключа, такой как PBKDF2 или scrypt, результат функции выведения ключа зависит от того, используются ли в строке составные или разложенные символы. Node.js не нормализует представления символов. Разработчикам следует рассмотреть возможность использования
String.prototype.normalize()
для пользовательского ввода перед передачей его в криптографические API.
Старый API потоков (до Node.js 0.10)¶
Модуль Crypto был добавлен в Node.js до появления концепции унифицированного Stream API, и до появления объектов Buffer
для работы с двоичными данными. Поэтому многие классы, определяющие crypto
, имеют методы, которые обычно не встречаются в других классах Node.js, реализующих API streams (например, update()
, final()
или digest()
). Кроме того, многие методы по умолчанию принимали и возвращали строки в кодировке 'latin1'
, а не буфер
. Это значение было изменено после Node.js v0.8 на использование объектов Buffer
по умолчанию.
Поддержка слабых или скомпрометированных алгоритмов¶
Модуль node:crypto
по-прежнему поддерживает некоторые алгоритмы, которые уже скомпрометированы и в настоящее время не рекомендуются для использования. API также позволяет использовать шифры и хэши с небольшим размером ключа, которые слишком слабы для безопасного использования.
Пользователи должны взять на себя полную ответственность за выбор криптоалгоритма и размера ключа в соответствии со своими требованиями к безопасности.
В соответствии с рекомендациями NIST SP 800-131A:
- MD5 и SHA-1 больше не приемлемы там, где требуется устойчивость к коллизиям, например, в цифровых подписях.
- Ключ, используемый в алгоритмах RSA, DSA и DH, рекомендуется иметь не менее 2048 бит, а ключ кривой ECDSA и ECDH - не менее 224 бит, чтобы его можно было безопасно использовать в течение нескольких лет.
- Группы DH
modp1
,modp2
иmodp5
имеют размер ключа меньше 2048 бит и не рекомендуются.
Другие рекомендации и подробности см. в справочнике.
Некоторые алгоритмы, имеющие известные недостатки и малоприменимые на практике, доступны только через legacy provider, который не включен по умолчанию.
Режим CCM¶
CCM является одним из поддерживаемых AEAD алгоритмов. Приложения, использующие этот режим, должны придерживаться определенных ограничений при использовании API шифра:
- Длина тега аутентификации должна быть указана при создании шифра путем установки опции
authTagLength
и должна быть одной из 4, 6, 8, 10, 12, 14 или 16 байт. - Длина вектора инициализации (nonce)
N
должна быть от 7 до 13 байт (7 ≤ N ≤ 13
). - Длина открытого текста ограничена
2 ** (8 * (15 - N))
байтами. - При расшифровке тег аутентификации должен быть установлен с помощью
setAuthTag()
перед вызовомupdate()
. В противном случае расшифровка будет неудачной, иfinal()
выдаст ошибку в соответствии с разделом 2.6 RFC 3610. - Использование потоковых методов, таких как
write(data)
,end(data)
илиpipe()
в режиме CCM может быть неудачным, так как CCM не может обрабатывать более одного куска данных на экземпляр. - При передаче дополнительных аутентифицированных данных (AAD), длина фактического сообщения в байтах должна быть передана в
setAAD()
через опциюplaintextLength
. Многие криптобиблиотеки включают тег аутентификации в шифротекст, что означает, что они создают шифротексты длинойplaintextLength + authTagLength
. Node.js не включает тег аутентификации, поэтому длина шифротекста всегда равнаplaintextLength
. Это не требуется, если не используется AAD. - Поскольку CCM обрабатывает все сообщение сразу,
update()
должна быть вызвана ровно один раз. - Даже если вызова
update()
достаточно для шифрования/дешифрования сообщения, приложения должны вызыватьfinal()
для вычисления или проверки метки аутентификации.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
Константы криптографии¶
Следующие константы, экспортируемые crypto.constants
, применяются к различным вариантам использования модулей node:crypto
, node:tls
и node:https
и в целом специфичны для OpenSSL.
OpenSSL options¶
See the list of SSL OP Flags for details.
Constant | Description |
---|---|
SSL_OP_ALL | Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man3.0/man3/SSL_CTX_set_options.html for detail. |
SSL_OP_ALLOW_NO_DHE_KEX | Instructs OpenSSL to allow a non-\[EC\]DHE-based key exchange mode for TLS v1.3 |
SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION | Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man3.0/man3/SSL_CTX_set_options.html. |
SSL_OP_CIPHER_SERVER_PREFERENCE | Attempts to use the server’s preferences instead of the client’s when selecting a cipher. Behavior depends on protocol version. See https://www.openssl.org/docs/man3.0/man3/SSL_CTX_set_options.html. |
SSL_OP_CISCO_ANYCONNECT | Instructs OpenSSL to use Cisco’s “speshul” version of DTLS_BAD_VER. |
SSL_OP_COOKIE_EXCHANGE | Instructs OpenSSL to turn on cookie exchange. |
SSL_OP_CRYPTOPRO_TLSEXT_BUG | Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. |
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS | Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. |
SSL_OP_LEGACY_SERVER_CONNECT | Allows initial connection to servers that do not support RI. |
SSL_OP_NO_COMPRESSION | Instructs OpenSSL to disable support for SSL/TLS compression. |
SSL_OP_NO_ENCRYPT_THEN_MAC | Instructs OpenSSL to disable encrypt-then-MAC. |
SSL_OP_NO_QUERY_MTU | |
SSL_OP_NO_RENEGOTIATION | Instructs OpenSSL to disable renegotiation. |
SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION | Instructs OpenSSL to always start a new session when performing renegotiation. |
SSL_OP_NO_SSLv2 | Instructs OpenSSL to turn off SSL v2 |
SSL_OP_NO_SSLv3 | Instructs OpenSSL to turn off SSL v3 |
SSL_OP_NO_TICKET | Instructs OpenSSL to disable use of RFC4507bis tickets. |
SSL_OP_NO_TLSv1 | Instructs OpenSSL to turn off TLS v1 |
SSL_OP_NO_TLSv1_1 | Instructs OpenSSL to turn off TLS v1.1 |
SSL_OP_NO_TLSv1_2 | Instructs OpenSSL to turn off TLS v1.2 |
SSL_OP_NO_TLSv1_3 | Instructs OpenSSL to turn off TLS v1.3 |
SSL_OP_PRIORITIZE_CHACHA | Instructs OpenSSL server to prioritize ChaCha20-Poly1305 when the client does. This option has no effect if SSL_OP_CIPHER_SERVER_PREFERENCE is not enabled. |
SSL_OP_TLS_ROLLBACK_BUG | Instructs OpenSSL to disable version rollback attack detection. |
OpenSSL engine constants¶
Constant | Description |
---|---|
ENGINE_METHOD_RSA | Limit engine usage to RSA |
ENGINE_METHOD_DSA | Limit engine usage to DSA |
ENGINE_METHOD_DH | Limit engine usage to DH |
ENGINE_METHOD_RAND | Limit engine usage to RAND |
ENGINE_METHOD_EC | Limit engine usage to EC |
ENGINE_METHOD_CIPHERS | Limit engine usage to CIPHERS |
ENGINE_METHOD_DIGESTS | Limit engine usage to DIGESTS |
ENGINE_METHOD_PKEY_METHS | Limit engine usage to PKEY_METHDS |
ENGINE_METHOD_PKEY_ASN1_METHS | Limit engine usage to PKEY_ASN1_METHS |
ENGINE_METHOD_ALL | |
ENGINE_METHOD_NONE |
Other OpenSSL constants¶
Constant | Description |
---|---|
DH_CHECK_P_NOT_SAFE_PRIME | |
DH_CHECK_P_NOT_PRIME | |
DH_UNABLE_TO_CHECK_GENERATOR | |
DH_NOT_SUITABLE_GENERATOR | |
RSA_PKCS1_PADDING | |
RSA_SSLV23_PADDING | |
RSA_NO_PADDING | |
RSA_PKCS1_OAEP_PADDING | |
RSA_X931_PADDING | |
RSA_PKCS1_PSS_PADDING | |
RSA_PSS_SALTLEN_DIGEST | Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. |
RSA_PSS_SALTLEN_MAX_SIGN | Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. |
RSA_PSS_SALTLEN_AUTO | Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. |
POINT_CONVERSION_COMPRESSED | |
POINT_CONVERSION_UNCOMPRESSED | |
POINT_CONVERSION_HYBRID |
Node.js crypto constants¶
Constant | Description |
---|---|
defaultCoreCipherList | Specifies the built-in default cipher list used by Node.js. |
defaultCipherList | Specifies the active default cipher list used by the current Node.js process. |