Аналог 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 = <<

21 Авг 2019 в 07:11
300 +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 = StringToByteArrayencryptedDataHexencryptedDataHexencryptedDataHex;
string publicRsaKey = "<RSAKeyValue><Modulus>MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAM3FNB5qt30VNntSHy75M9A3mfi8xG1Kcz+4LKcZuQMLAgMBAAE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider;
rsa.FromXmlStringpublicRsaKeypublicRsaKeypublicRsaKey;
byte decryptedData = rsa.DecryptencryptedData,falseencryptedData, falseencryptedData,false;
string decryptedDataHex = BitConverter.ToStringdecryptedDatadecryptedDatadecryptedData.Replace"−","""-", """","".ToLower;
Console.WriteLine"Decrypteddata:"+decryptedDataHex"Decrypted data: " + decryptedDataHex"Decrypteddata:"+decryptedDataHex;
}
public static byte StringToByteArraystringhexstring hexstringhex {
int numberChars = hex.Length;
byte bytes = new bytenumberChars/2numberChars / 2numberChars/2;
for (int i = 0; i < numberChars; i += 2)
{
bytesi/2i / 2i/2 = Convert.ToBytehex.Substring(i,2),16hex.Substring(i, 2), 16hex.Substring(i,2),16;
}
return bytes;
}
}

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

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