Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Crypto
Наследует: RefCounted < Object
Предоставляет доступ к расширенным криптографическим функциям.
Описание
Класс Crypto обеспечивает доступ к расширенным криптографическим функциям.
В настоящее время сюда входят асимметричное шифрование/дешифрование ключей, подписание/проверка и генерация криптографически безопасных случайных байтов, ключей RSA, дайджестов HMAC и самоподписанных X509Certificate.
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)
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);
Методы
constant_time_compare(trusted: PackedByteArray, received: PackedByteArray) |
|
decrypt(key: CryptoKey, ciphertext: PackedByteArray) |
|
encrypt(key: CryptoKey, plaintext: PackedByteArray) |
|
generate_random_bytes(size: int) |
|
generate_rsa(size: int) |
|
generate_self_signed_certificate(key: CryptoKey, issuer_name: String = "CN=myserver,O=myorganisation,C=IT", not_before: String = "20140101000000", not_after: String = "20340101000000") |
|
hmac_digest(hash_type: HashType, key: PackedByteArray, msg: PackedByteArray) |
|
sign(hash_type: HashType, hash: PackedByteArray, key: CryptoKey) |
|
verify(hash_type: HashType, hash: PackedByteArray, signature: PackedByteArray, key: CryptoKey) |
Описания метода
bool constant_time_compare(trusted: PackedByteArray, received: PackedByteArray) 🔗
Сравнивает два PackedByteArray на равенство без утечки информации о времени, чтобы предотвратить атаки по времени.
См. эту запись в блоге для получения дополнительной информации.
PackedByteArray decrypt(key: CryptoKey, ciphertext: PackedByteArray) 🔗
Расшифруйте заданный ciphertext с помощью предоставленного закрытого key.
Примечание: Максимальный размер принятого шифротекста ограничен размером ключа.
PackedByteArray encrypt(key: CryptoKey, plaintext: PackedByteArray) 🔗
Зашифруйте указанный plaintext с помощью предоставленного открытого key.
Примечание: Максимальный размер принятого открытого текста ограничен размером ключа.
PackedByteArray generate_random_bytes(size: int) 🔗
Генерирует PackedByteArray криптографически безопасных случайных байтов с заданным size.
CryptoKey generate_rsa(size: int) 🔗
Генерирует RSA CryptoKey, который можно использовать для создания самоподписанных сертификатов и передавать в StreamPeerTLS.accept_stream().
X509Certificate generate_self_signed_certificate(key: CryptoKey, issuer_name: String = "CN=myserver,O=myorganisation,C=IT", not_before: String = "20140101000000", not_after: String = "20340101000000") 🔗
Генерирует самоподписанный X509Certificate из заданного CryptoKey и issuer_name. Действительность сертификата будет определяться not_before и not_after (первая действительная дата и последняя действительная дата). issuer_name должен содержать как минимум "CN=" (общее имя, т. е. доменное имя), "O=" (организация, т. е. название вашей компании), "C=" (страна, т. е. двухбуквенный код ISO-3166 страны, в которой находится организация).
Небольшой пример генерации ключа RSA и самоподписанного сертификата X509.
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")
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");
PackedByteArray hmac_digest(hash_type: HashType, key: PackedByteArray, msg: PackedByteArray) 🔗
Генерирует HMAC дайджест msg с использованием key. Параметр hash_type — это алгоритм хеширования, который используется для внутренних и внешних хешей.
В настоящее время поддерживаются только HashingContext.HASH_SHA256 и HashingContext.HASH_SHA1.
PackedByteArray sign(hash_type: HashType, hash: PackedByteArray, key: CryptoKey) 🔗
Подписать заданный hash типа hash_type с помощью предоставленного закрытого key.
bool verify(hash_type: HashType, hash: PackedByteArray, signature: PackedByteArray, key: CryptoKey) 🔗
Проверьте, что заданная signature для hash типа hash_type соответствует предоставленному открытому key.