Crypto
Предоставляет доступ к расширенным криптографическим функциям.
Предоставляет доступ к расширенным криптографическим функциям.
Класс Crypto обеспечивает доступ к расширенным криптографическим функциям.
В настоящее время сюда входят асимметричное шифрование/дешифрование ключей, подписание/проверка и генерация криптографически безопасных случайных байтов, ключей RSA, дайджестов HMAC и самоподписанных X509Certificate.
using Reckfell;
using System.Diagnostics;
Crypto crypto = new Crypto();
// Generate new RSA key.
CryptoKey key = crypto.GenerateRsa(4096);
// Generate new self-signed certificate with the given key.
X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");
// Save key and certificate in the user folder.
key.Save("user://generated.key");
cert.Save("user://generated.crt");
// Encryption
string data = "Some data";
byte[] encrypted = crypto.Encrypt(key, data.ToUtf8Buffer());
// Decryption
byte[] decrypted = crypto.Decrypt(key, encrypted);
// Signing
byte[] signature = crypto.Sign(HashingContext.HashType.Sha256, Data.Sha256Buffer(), key);
// Verifying
bool verified = crypto.Verify(HashingContext.HashType.Sha256, Data.Sha256Buffer(), signature, key);
// Checks
Debug.Assert(verified);
Debug.Assert(data.ToUtf8Buffer() == decrypted);Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
CryptoКонструктор
public Crypto();Методы15
ConstantTimeCompare2 перегрузки
public bool ConstantTimeCompare(byte[] trusted, byte[] received);Сравнивает два byte[] на равенство без утечки информации о времени, чтобы предотвратить атаки по времени.
См. эту запись в блоге для получения дополнительной информации.
| Имя | Тип | По умолчанию |
|---|---|---|
trusted | byte[] | — |
received | byte[] | — |
boolpublic bool ConstantTimeCompare(ReadOnlySpan<byte> trusted, ReadOnlySpan<byte> received);Сравнивает два byte[] на равенство без утечки информации о времени, чтобы предотвратить атаки по времени.
См. эту запись в блоге для получения дополнительной информации.
| Имя | Тип | По умолчанию |
|---|---|---|
trusted | ReadOnlySpan<byte> | — |
received | ReadOnlySpan<byte> | — |
boolDecrypt2 перегрузки
public byte[] Decrypt(CryptoKey key, byte[] ciphertext);Расшифруйте заданный ciphertext с помощью предоставленного закрытого key.
Примечание: Максимальный размер принятого шифротекста ограничен размером ключа.
| Имя | Тип | По умолчанию |
|---|---|---|
key | CryptoKey | — |
ciphertext | byte[] | — |
byte[]public byte[] Decrypt(CryptoKey key, ReadOnlySpan<byte> ciphertext);Расшифруйте заданный ciphertext с помощью предоставленного закрытого key.
Примечание: Максимальный размер принятого шифротекста ограничен размером ключа.
| Имя | Тип | По умолчанию |
|---|---|---|
key | CryptoKey | — |
ciphertext | ReadOnlySpan<byte> | — |
byte[]Encrypt2 перегрузки
public byte[] Encrypt(CryptoKey key, byte[] plaintext);Зашифруйте указанный plaintext с помощью предоставленного открытого key.
Примечание: Максимальный размер принятого открытого текста ограничен размером ключа.
| Имя | Тип | По умолчанию |
|---|---|---|
key | CryptoKey | — |
plaintext | byte[] | — |
byte[]public byte[] Encrypt(CryptoKey key, ReadOnlySpan<byte> plaintext);Зашифруйте указанный plaintext с помощью предоставленного открытого key.
Примечание: Максимальный размер принятого открытого текста ограничен размером ключа.
| Имя | Тип | По умолчанию |
|---|---|---|
key | CryptoKey | — |
plaintext | ReadOnlySpan<byte> | — |
byte[]GenerateRandomBytesbyte[]
public byte[] GenerateRandomBytes(int size);Генерирует byte[] криптографически безопасных случайных байтов с заданным size.
| Имя | Тип | По умолчанию |
|---|---|---|
size | int | — |
byte[]GenerateRsaCryptoKey
public CryptoKey GenerateRsa(int size);Генерирует RSA CryptoKey, который можно использовать для создания самоподписанных сертификатов и передавать в StreamPeerTls.AcceptStream.
| Имя | Тип | По умолчанию |
|---|---|---|
size | int | — |
CryptoKeyGenerateSelfSignedCertificateX509Certificate
public X509Certificate GenerateSelfSignedCertificate(CryptoKey key, string issuerName = "CN=myserver,O=myorganisation,C=IT", string notBefore = "20140101000000", string notAfter = "20340101000000");Генерирует самоподписанный X509Certificate из заданного CryptoKey и issuer_name. Действительность сертификата будет определяться not_before и not_after (первая действительная дата и последняя действительная дата). issuer_name должен содержать как минимум "CN=" (общее имя, т. е. доменное имя), "O=" (организация, т. е. название вашей компании), "C=" (страна, т. е. двухбуквенный код ISO-3166 страны, в которой находится организация).
Небольшой пример генерации ключа RSA и самоподписанного сертификата X509.
var crypto = new Crypto();
// Generate 4096 bits RSA key.
CryptoKey key = crypto.GenerateRsa(4096);
// Generate self-signed certificate using the given key.
X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");| Имя | Тип | По умолчанию |
|---|---|---|
key | CryptoKey | — |
issuerName | string | "CN=myserver,O=myorganisation,C=IT" |
notBefore | string | "20140101000000" |
notAfter | string | "20340101000000" |
X509CertificateHmacDigest2 перегрузки
public byte[] HmacDigest(HashingContext.HashType hashType, byte[] key, byte[] msg);Генерирует HMAC(https://en.wikipedia.org/wiki/HMAC) дайджест msg с использованием key. Параметр hash_type — это алгоритм хеширования, который используется для внутренних и внешних хешей.
В настоящее время поддерживаются только HashingContext.HashType.Sha256 и HashingContext.HashType.Sha1.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
key | byte[] | — |
msg | byte[] | — |
byte[]public byte[] HmacDigest(HashingContext.HashType hashType, ReadOnlySpan<byte> key, ReadOnlySpan<byte> msg);Генерирует HMAC(https://en.wikipedia.org/wiki/HMAC) дайджест msg с использованием key. Параметр hash_type — это алгоритм хеширования, который используется для внутренних и внешних хешей.
В настоящее время поддерживаются только HashingContext.HashType.Sha256 и HashingContext.HashType.Sha1.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
key | ReadOnlySpan<byte> | — |
msg | ReadOnlySpan<byte> | — |
byte[]Sign2 перегрузки
public byte[] Sign(HashingContext.HashType hashType, byte[] hash, CryptoKey key);Подписать заданный hash типа hash_type с помощью предоставленного закрытого key.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
hash | byte[] | — |
key | CryptoKey | — |
byte[]public byte[] Sign(HashingContext.HashType hashType, ReadOnlySpan<byte> hash, CryptoKey key);Подписать заданный hash типа hash_type с помощью предоставленного закрытого key.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
hash | ReadOnlySpan<byte> | — |
key | CryptoKey | — |
byte[]Verify2 перегрузки
public bool Verify(HashingContext.HashType hashType, byte[] hash, byte[] signature, CryptoKey key);Проверьте, что заданная signature для hash типа hash_type соответствует предоставленному открытому key.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
hash | byte[] | — |
signature | byte[] | — |
key | CryptoKey | — |
boolpublic bool Verify(HashingContext.HashType hashType, ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature, CryptoKey key);Проверьте, что заданная signature для hash типа hash_type соответствует предоставленному открытому key.
| Имя | Тип | По умолчанию |
|---|---|---|
hashType | HashingContext.HashType | — |
hash | ReadOnlySpan<byte> | — |
signature | ReadOnlySpan<byte> | — |
key | CryptoKey | — |
bool