генерирует ключ в AES-заполнении CBC - PullRequest
0 голосов
/ 19 октября 2019

Я новичок в C # и генерирую ключ myRijndaelManaged.GenerateIV (); myRijndaelManaged.GenerateKey ();

в классе

public string EncryptText(string plainText)
    {
        using (myRijndael = new RijndaelManaged())
        {

            RijndaelManaged myRijndaelManaged = new RijndaelManaged();
            myRijndaelManaged.Mode = CipherMode.CBC;
            myRijndaelManaged.Padding = PaddingMode.PKCS7;
            myRijndaelManaged.GenerateIV();
            myRijndaelManaged.GenerateKey();      
            string newKey = ByteArrayToHexString(myRijndaelManaged.Key);
            string newinitVector = ByteArrayToHexString(myRijndaelManaged.IV);
            byte[] encrypted = EncryptStringToBytes(plainText, myRijndael.Key, myRijndael.IV);
            string encString = Convert.ToBase64String(encrypted);
            return encString;
        }
    }

Как дать те же ключи в классе

public string DecryptText(string encryptedString)  
    {  
        using (myRijndael = new RijndaelManaged())  
        {  
            myRijndael.Key =newKey;
            myRijndael.IV = newinitVector;  
            myRijndael.Mode = CipherMode.CBC;  
            myRijndael.Padding = PaddingMode.PKCS7;  
            Byte[] ourEnc = Convert.FromBase64String(encryptedString);  
            string ourDec = DecryptStringFromBytes(ourEnc, myRijndael.Key, myRijndael.IV);  
            return ourDec;  
        }  
    }  

Когда я даю другой ключ, у меня возникает проблема с System.Security.Cryptography.CryptographicException: «Заполнение недопустимо и не может быть удалено».

1 Ответ

0 голосов
/ 19 октября 2019

Хотя я не специалист по шифрованию, но для меня это все еще имеет смысл. Я имею в виду, вы должны передать сгенерированный iv и ключ функции, которая расшифровывает. Например:

public string DecryptText(string encryptedString, string Iv, string Key)  
    {  
        using (myRijndael = new RijndaelManaged())  
        {  
            myRijndael.Key = Key;
            myRijndael.IV = Iv;  
            myRijndael.Mode = CipherMode.CBC;  
            myRijndael.Padding = PaddingMode.PKCS7;  
            Byte[] ourEnc = Convert.FromBase64String(encryptedString);  
            string ourDec = DecryptStringFromBytes(ourEnc, myRijndael.Key, myRijndael.IV);  
            return ourDec;  
        }  
    }  

Ну, я не уверен, что представляют собой типы данных Iv и Key, измените их в соответствии с вашими потребностями.

...