Не получается преобразовать byte[] в byte. Когда я хочу вернуть открытый и закрытый ключи byte[] keys = new byte[] { publicKey, privateKey }; Пишет Cannot implicitly convert type 'byte[]' to 'byte'. как можно это исправить?
using System;
using System.Security.Cryptography;
using System.Text;
namespace RSAviaConsole
{
class Program
{
private static RSAParameters publicKey;
private static RSAParameters privateKey;
static void Main(string[] args)
{
Console.Write("Текс для шифрования: \n");
string message = Console.ReadLine();
Console.WriteLine();
Console.Write("Размер ключей: \n");
int Key_size = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
byte[] keys = GenerateKeys(Key_size);
byte[] encrypted = Encrypt(Encoding.UTF8.GetBytes(message), keys, Key_size);
byte[] decrypted = Decrypt(encrypted, keys, Key_size);
Console.WriteLine("Зашифрованный текст:\n{0}\n", BitConverter.ToString(encrypted).Replace("-",""));
Console.WriteLine("Расшифрованный текст:\n{0}\n", Encoding.UTF8.GetString(decrypted));
Console.ReadLine();
}
static byte[] GenerateKeys(int Key_size)
{
using (var rsa = new RSACryptoServiceProvider(Key_size))
{
rsa.PersistKeyInCsp = false;
byte[] publicKey = rsa.ExportCspBlob(false);
byte[] privateKey = rsa.ExportCspBlob(true);
string PrivateKey = Convert.ToBase64String(privateKey);
string PublicKey = Convert.ToBase64String(publicKey);
Console.WriteLine("Открытый ключ:\n{0}\n", PrivateKey);
Console.WriteLine("Закрытый ключ:\n{0}\n", PublicKey);
byte[] keys = new byte[] { publicKey, privateKey };
return keys;
}
}
static byte[] Encrypt(byte[] input, byte[] keys, int Key_size)
{
byte[] encrypted;
using (var rsa = new RSACryptoServiceProvider(Key_size))
{
rsa.PersistKeyInCsp = false;
rsa.ImportCspBlob(keys);
encrypted = rsa.Encrypt(input, true);
}
return encrypted;
}
static byte[] Decrypt(byte[] input, byte[] keys, int Key_size)
{
byte[] decrypted;
using (var rsa = new RSACryptoServiceProvider(Key_size))
{
rsa.PersistKeyInCsp = false;
rsa.ImportCspBlob(keys);
decrypted = rsa.Decrypt(input, true);
}
return decrypted;
}
}
}
Ошибка в том, что метод должен возвращать byte[], но идет попытка вернуть byte[][]
В данном случае можно воспользоваться кортежами
static (byte[] PublicKey, byte[] PrivateKey) GenerateKeys(int Key_size){
...
return (publicKey, privateKey)
}
И при вызове:
var (PublickKey, PrivateKey) = GenerateKeys(Key_size);
Далее можно использовать непосредственно переменные PublickKey, PrivateKey.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей