Cannot implicitly convert type 'byte[]' to 'byte'

225
04 мая 2018, 10:27

Не получается преобразовать 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;
        }
    }
}
Answer 1

Ошибка в том, что метод должен возвращать byte[], но идет попытка вернуть byte[][]

В данном случае можно воспользоваться кортежами

static (byte[] PublicKey, byte[] PrivateKey) GenerateKeys(int Key_size){
    ...
    return (publicKey, privateKey)
}

И при вызове:

var (PublickKey, PrivateKey) = GenerateKeys(Key_size);

Далее можно использовать непосредственно переменные PublickKey, PrivateKey.

READ ALSO
Любое количество любых символов

Любое количество любых символов

Как, используя регулярные выражения задать паттерн вида :

236
Как запустить скрипт, если нет exe?

Как запустить скрипт, если нет exe?

Как запустить скрипт, если нет exe?

272
Поиск слова в тексте и удаление ненужных слов c#

Поиск слова в тексте и удаление ненужных слов c#

В общем есть строка n-й длины (Текст от 5 до 1000 слов)

237
На какой платформе лучше делать сайт? [требует правки]

На какой платформе лучше делать сайт? [требует правки]

подскажите на какой платформе лучше учиться программировать сайты?

316