Аналог PHP функции openssl_public_decrypt() в C#? С помощью openssl сгенерированы публичный и приватный ключи RSA 512.
Необходимо с помощью публичного ключа расшифровать на С# данные, зашифрованные приватным ключом на PHP.
Пример кода на PHP:$dataForEncryption = "Somedata";
printf("Data for encryption: %s\r\n\r\n", $dataForEncryption);
$hash = hash("SHA1", $dataForEncryption, true);
printf("SHA1 (hex): %s\r\n\r\n", bin2hex($hash));
printf("SHA1 (base64): %s\r\n\r\n", base64_encode($hash));
openssl_private_encrypt($hash, $encrypted, openssl_get_privatekey($private_key));
printf("Encrypted data: %s\r\n\r\n", bin2hex($encrypted));
printf("Encrypted data: %s\r\n\r\n", base64_encode($encrypted));
$public_key = <<-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAM3FNB5qt30VNntSHy75M9A3mfi8xG1K
cz+4LKcZuQMLAgMBAAE=
-----END PUBLIC KEY-----
SOMEDATA777;
openssl_public_decrypt($encrypted, $decrypted, openssl_get_publickey($public_key));
printf("Decrypted data: %s\r\n\r\n", bin2hex($decrypted));
Результат выполнения скрипта:Data for encryption: Somedata
SHA1 (hex): 13b05742beeaef568748ae6e7f40da744f4374f3
SHA1 (base64): E7BXQr7q71aHSK5uf0DadE9DdPM=
Encrypted data: 98e12894b164c700c26d04bca4a017191214460538b59b00ddff612732f7f94e
Encrypted data: mOEolLFkxwDCbQS8pKAXGRIURgU4tZsA3f9hJzL3+U4=
Decrypted data: 13b05742beeaef568748ae6e7f40da744f4374f3

21 Авг 2019 в 07:11
275 +1
0
Ответы
1

В C# для работы с RSA ключами и шифрованием/дешифрованием данных можно использовать библиотеку System.Security.Cryptography. Ниже представлен пример кода на C#, который выполняет дешифрование данных с использованием публичного ключа RSA:

using System;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
string encryptedDataHex = "98e12894b164c700c26d04bca4a017191214460538b59b00ddff612732f7f94e";
byte[] encryptedData = StringToByteArray(encryptedDataHex);
string publicRsaKey = "<RSAKeyValue><Modulus>MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAM3FNB5qt30VNntSHy75M9A3mfi8xG1Kcz+4LKcZuQMLAgMBAAE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicRsaKey);
byte[] decryptedData = rsa.Decrypt(encryptedData, false);
string decryptedDataHex = BitConverter.ToString(decryptedData).Replace("-", "").ToLower();
Console.WriteLine("Decrypted data: " + decryptedDataHex);
}
public static byte[] StringToByteArray(string hex)
{
int numberChars = hex.Length;
byte[] bytes = new byte[numberChars / 2];
for (int i = 0; i < numberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}
}

При запуске этого кода с зашифрованными данными и публичным ключом RSA в формате XML, код дешифрует данные и выводит их в виде HEX строки.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 750 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир