Пожалуйста, помогите мне исправить код Bouncy Castle в режиме AES CTR в C # - PullRequest
1 голос
/ 16 июня 2019

Bouncy Castle CRT Csharp, Decrypt не удалось получить простой текст

Тест не пройден

   static void Main(string[] args) {
        string toEncrypt = "This is a test string";
        byte[] key = Encoding.ASCII.GetBytes("0123456789abcdef");            
        byte[] iv = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff };

        Console.Write("\n Plain: " + toEncrypt); 

        // create AES cipher
        IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding");
        cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));

        // encrypted
        byte[] input = Encoding.ASCII.GetBytes(toEncrypt);
        byte[] encryptedBytes = cipher.DoFinal(input);
        string base64EncryptedOutputString = Convert.ToBase64String(encryptedBytes);
        Console.Write("\n Base64Encrypted:" + base64EncryptedOutputString);

        // decrypted
        byte[] toDecrypt = Encoding.ASCII.GetBytes(base64EncryptedOutputString);
        cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));
        byte[] plainBytes = cipher.DoFinal(toDecrypt);
        Console.WriteLine("\n Decrypted:" + Encoding.ASCII.GetString(plainBytes));
    }

Обычный: Это тестовая строка

Base64Encrypted: 71WVSPK31A + QrCUyqppI56fQixMV

Расшифровано: ?? m ????? z ?? = ???? 4G ??? e? W?

---> Расшифровано не то же самое с PLAIN Текст:)

1 Ответ

1 голос
/ 16 июня 2019

Проблема в том, что вам не хватает преобразования из base64 обратно в исходный байтовый массив.

Вместо:

byte[] toDecrypt = Encoding.ASCII.GetBytes(base64EncryptedOutputString);

Вам нужно:

byte[] toDecrypt = Convert.FromBase64String(base64EncryptedOutputString);

См. MSDN

...