Расшифровка AES в уникальном C # - PullRequest
1 голос
/ 15 апреля 2019

Я использую AES для шифрования и дешифрования паролей на сайте. В любом случае; шифрование работает просто отлично. Но у меня есть некоторые проблемы с расшифровкой. На линии:

byte[] decrypted = DecryptStringFromBytes_Aes(encrypted, key, iv);

Я получаю эту ошибку: Невозможно преобразовать тип 'string' в 'byte []'. Я много чего перепробовал, но ничего не получается.

Вы можете увидеть оставшуюся часть кода ниже.

string original = txtEncrypt.Text;

        byte[] key = new byte[] { 3,122,23,189,15,2,55,82,97,17,255,45,1,65,41,200 };

        byte[] iv = new byte[16];
        Aes myAes = Aes.Create();

        byte[] encrypted = EncryptStringToBytes_Aes(original, key, iv);
        byte[] decrypted = DecryptStringFromBytes_Aes(encrypted, key, iv);

С уважением, Адриан

1 Ответ

1 голос
/ 16 апреля 2019

Пример кода, который вы использовали, возвращает зашифрованный текст в виде байтового массива.Современные шифры, такие как AES в режиме CBC, который вы используете, работают с байтами, а не со строками.

Поэтому, если вам нужна строка, вам нужно преобразовать ее в строку, а затем снова вернуться.Для этого вы можете использовать кодировку, например, кодировку base 64.Так что закодируйте в base 64 после шифрования, а затем декодируйте перед расшифровкой.

Если вы просто интерпретируете байты как строку (например, UTF-8), тогда вы испытаете потерю данных, поскольку не каждый байт является допустимым / пригодным для печатиСимвол UTF-8.

Не забудьте включить всю необходимую информацию, которая должна быть передана, например, IV.Пример кода удобно об этом забывает.

Обратите внимание, что CBC не является безопасным для безопасности в транспортном режиме;использовать только для данных в состоянии покоя.

...