mirror of
https://github.com/godotengine/godot-docs-l10n.git
synced 2025-12-31 09:49:22 +03:00
272 lines
20 KiB
ReStructuredText
272 lines
20 KiB
ReStructuredText
: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 (Нет возвращаемого значения.)`
|