Files
godot-docs-l10n/classes/ru/class_crypto.rst

272 lines
20 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. _class_Crypto:
Crypto
======
**Наследует:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Предоставляет доступ к расширенным криптографическим функциям.
.. rst-class:: classref-introduction-group
Описание
----------------
Класс Crypto обеспечивает доступ к расширенным криптографическим функциям.
В настоящее время сюда входят асимметричное шифрование/дешифрование ключей, подписание/проверка и генерация криптографически безопасных случайных байтов, ключей RSA, дайджестов HMAC и самоподписанных :ref:`X509Certificate<class_X509Certificate>`.
.. tabs::
.. code-tab:: gdscript
var crypto = Crypto.new()
# Сгенерируйте новый ключ RSA.
var key = crypto.generate_rsa(4096)
# Сгенерировать новый самоподписанный сертификат с указанным ключом.
var cert = crypto.generate_self_signed_certificate(key, "CN=mydomain.com,O=My Game Company,C=IT")
# Сохраните ключ и сертификат в папке пользователя.
key.save("user://generated.key")
cert.save("user://generated.crt")
# Шифрование
var data = "Some data"
var encrypted = crypto.encrypt(key, data.to_utf8_buffer())
# Расшифровка
var decrypted = crypto.decrypt(key, encrypted)
#Подписание
var signature = crypto.sign(HashingContext.HASH_SHA256, data.sha256_buffer(), key)
# Проверка
var verified = crypto.verify(HashingContext.HASH_SHA256, data.sha256_buffer(), signature, key)
# Проверки
assert(verified)
assert(data.to_utf8_buffer() == decrypted)
.. code-tab:: csharp
using Godot;
using System.Diagnostics;
Crypto crypto = new Crypto();
// Сгенерируйте новый ключ RSA.
CryptoKey key = crypto.GenerateRsa(4096);
// Сгенерировать новый самоподписанный сертификат с указанным ключом.
X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");
// Сохраните ключ и сертификат в папке пользователя.
key.Save("user://generated.key");
cert.Save("user://generated.crt");
// Шифрование
string data = "Some data";
byte[] encrypted = crypto.Encrypt(key, data.ToUtf8Buffer());
// Расшифровка
byte[] decrypted = crypto.Decrypt(key, encrypted);
// Подписание
byte[] signature = crypto.Sign(HashingContext.HashType.Sha256, Data.Sha256Buffer(), key);
// Проверка
bool verified = crypto.Verify(HashingContext.HashType.Sha256, Data.Sha256Buffer(), signature, key);
// Проверки
Debug.Assert(verified);
Debug.Assert(data.ToUtf8Buffer() == decrypted);
.. rst-class:: classref-reftable-group
Методы
------------
.. table::
:widths: auto
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`constant_time_compare<class_Crypto_method_constant_time_compare>`\ (\ trusted\: :ref:`PackedByteArray<class_PackedByteArray>`, received\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`decrypt<class_Crypto_method_decrypt>`\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, ciphertext\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`encrypt<class_Crypto_method_encrypt>`\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, plaintext\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`generate_random_bytes<class_Crypto_method_generate_random_bytes>`\ (\ size\: :ref:`int<class_int>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`CryptoKey<class_CryptoKey>` | :ref:`generate_rsa<class_Crypto_method_generate_rsa>`\ (\ size\: :ref:`int<class_int>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`X509Certificate<class_X509Certificate>` | :ref:`generate_self_signed_certificate<class_Crypto_method_generate_self_signed_certificate>`\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, issuer_name\: :ref:`String<class_String>` = "CN=myserver,O=myorganisation,C=IT", not_before\: :ref:`String<class_String>` = "20140101000000", not_after\: :ref:`String<class_String>` = "20340101000000"\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`hmac_digest<class_Crypto_method_hmac_digest>`\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, key\: :ref:`PackedByteArray<class_PackedByteArray>`, msg\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`sign<class_Crypto_method_sign>`\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, hash\: :ref:`PackedByteArray<class_PackedByteArray>`, key\: :ref:`CryptoKey<class_CryptoKey>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`verify<class_Crypto_method_verify>`\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, hash\: :ref:`PackedByteArray<class_PackedByteArray>`, signature\: :ref:`PackedByteArray<class_PackedByteArray>`, key\: :ref:`CryptoKey<class_CryptoKey>`\ ) |
+-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описания метода
------------------------------
.. _class_Crypto_method_constant_time_compare:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **constant_time_compare**\ (\ trusted\: :ref:`PackedByteArray<class_PackedByteArray>`, received\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_Crypto_method_constant_time_compare>`
Сравнивает два :ref:`PackedByteArray<class_PackedByteArray>` на равенство без утечки информации о времени, чтобы предотвратить атаки по времени.
См. `эту запись в блоге <https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy>`__ для получения дополнительной информации.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_decrypt:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **decrypt**\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, ciphertext\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_Crypto_method_decrypt>`
Расшифруйте заданный ``ciphertext`` с помощью предоставленного закрытого ``key``.
\ **Примечание:** Максимальный размер принятого шифротекста ограничен размером ключа.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_encrypt:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **encrypt**\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, plaintext\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_Crypto_method_encrypt>`
Зашифруйте указанный ``plaintext`` с помощью предоставленного открытого ``key``.
\ **Примечание:** Максимальный размер принятого открытого текста ограничен размером ключа.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_generate_random_bytes:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **generate_random_bytes**\ (\ size\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Crypto_method_generate_random_bytes>`
Генерирует :ref:`PackedByteArray<class_PackedByteArray>` криптографически безопасных случайных байтов с заданным ``size``.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_generate_rsa:
.. rst-class:: classref-method
:ref:`CryptoKey<class_CryptoKey>` **generate_rsa**\ (\ size\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Crypto_method_generate_rsa>`
Генерирует RSA :ref:`CryptoKey<class_CryptoKey>`, который можно использовать для создания самоподписанных сертификатов и передавать в :ref:`StreamPeerTLS.accept_stream()<class_StreamPeerTLS_method_accept_stream>`.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_generate_self_signed_certificate:
.. rst-class:: classref-method
:ref:`X509Certificate<class_X509Certificate>` **generate_self_signed_certificate**\ (\ key\: :ref:`CryptoKey<class_CryptoKey>`, issuer_name\: :ref:`String<class_String>` = "CN=myserver,O=myorganisation,C=IT", not_before\: :ref:`String<class_String>` = "20140101000000", not_after\: :ref:`String<class_String>` = "20340101000000"\ ) :ref:`🔗<class_Crypto_method_generate_self_signed_certificate>`
Генерирует самоподписанный :ref:`X509Certificate<class_X509Certificate>` из заданного :ref:`CryptoKey<class_CryptoKey>` и ``issuer_name``. Действительность сертификата будет определяться ``not_before`` и ``not_after`` (первая действительная дата и последняя действительная дата). ``issuer_name`` должен содержать как минимум "CN=" (общее имя, т. е. доменное имя), "O=" (организация, т. е. название вашей компании), "C=" (страна, т. е. двухбуквенный код ISO-3166 страны, в которой находится организация).
Небольшой пример генерации ключа RSA и самоподписанного сертификата X509.
.. tabs::
.. code-tab:: gdscript
var crypto = Crypto.new()
# Сгенерируйте 4096-битный ключ RSA.
var key = crypto.generate_rsa(4096)
# Сгенерировать самоподписанный сертификат, используя указанный ключ.
var cert = crypto.generate_self_signed_certificate(key, "CN=example.com,O=A Game Company,C=IT")
.. code-tab:: csharp
var crypto = new Crypto();
// Сгенерируйте 4096-битный ключ RSA.
CryptoKey key = crypto.GenerateRsa(4096);
// Сгенерировать самоподписанный сертификат, используя указанный ключ.
X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_hmac_digest:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **hmac_digest**\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, key\: :ref:`PackedByteArray<class_PackedByteArray>`, msg\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_Crypto_method_hmac_digest>`
Генерирует `HMAC <https://en.wikipedia.org/wiki/HMAC>`__ дайджест ``msg`` с использованием ``key``. Параметр ``hash_type`` — это алгоритм хеширования, который используется для внутренних и внешних хешей.
В настоящее время поддерживаются только :ref:`HashingContext.HASH_SHA256<class_HashingContext_constant_HASH_SHA256>` и :ref:`HashingContext.HASH_SHA1<class_HashingContext_constant_HASH_SHA1>`.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_sign:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **sign**\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, hash\: :ref:`PackedByteArray<class_PackedByteArray>`, key\: :ref:`CryptoKey<class_CryptoKey>`\ ) :ref:`🔗<class_Crypto_method_sign>`
Подписать заданный ``hash`` типа ``hash_type`` с помощью предоставленного закрытого ``key``.
.. rst-class:: classref-item-separator
----
.. _class_Crypto_method_verify:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **verify**\ (\ hash_type\: :ref:`HashType<enum_HashingContext_HashType>`, hash\: :ref:`PackedByteArray<class_PackedByteArray>`, signature\: :ref:`PackedByteArray<class_PackedByteArray>`, key\: :ref:`CryptoKey<class_CryptoKey>`\ ) :ref:`🔗<class_Crypto_method_verify>`
Проверьте, что заданная ``signature`` для ``hash`` типа ``hash_type`` соответствует предоставленному открытому ``key``.
.. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)`
.. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)`
.. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)`
.. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)`
.. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)`
.. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)`
.. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`