Шифрование/дешифрование дает недопустимый символ в строке Base-64

Я работаю с алгоритмом шифрования/дешифрования RijndaelManaged.

При шифровании GUID мы получаем символ «%» в середине зашифрованного алгоритма. Когда я расшифровываю тот же зашифрованный графический интерфейс, я получаю сообщение об ошибке «Недопустимый символ в строке Base-64». Это происходит из-за наличия символа % в зашифрованном токене.

Вот Код для шифрования и дешифрования,

using System;
using System.Configuration;
using System.IO;
using System.Security.Cryptography;

public class ABC_RMCryptography
{
    public string Decrypt(string strValueIn)
    {
        try
        {
            byte[] arrB = System.Convert.FromBase64String(strValueIn);
            string strRC;

            byte[] key = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionKey"]);
            byte[] IV = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionVector"]);

            MemoryStream memStream = new MemoryStream(arrB);
            RijndaelManaged RMCrypto = new RijndaelManaged();
            CryptoStream CryptStream = new CryptoStream(memStream, RMCrypto.CreateDecryptor(key, IV), CryptoStreamMode.Read);

            StreamReader SReader = new StreamReader(CryptStream);
            strRC = SReader.ReadToEnd();
            SReader.Close();

            return strRC;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    public string Encrypt(string strValue)
    {
        MemoryStream memStream = new MemoryStream();

        try
        {
            byte[] key = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionKey"]);
            byte[] IV = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionVector"]);

            RijndaelManaged RMCrypto = new RijndaelManaged();

            CryptoStream CryptStream = new CryptoStream(memStream, RMCrypto.CreateEncryptor(key, IV), CryptoStreamMode.Write);
            StreamWriter SWriter = new StreamWriter(CryptStream);

            SWriter.Write(strValue);
            SWriter.Close();
            CryptStream.Close();

            byte[] b = memStream.ToArray();
            return Convert.ToBase64String(b);
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }

    private string GenerateRMKey()
    {

        RijndaelManaged objRM = new RijndaelManaged();
        objRM.GenerateKey();
        return Convert.ToBase64String(objRM.Key);

    }

    private string GenerateRMIV()
    {

        RijndaelManaged objRM = new RijndaelManaged();
        objRM.GenerateKey();
        return Convert.ToBase64String(objRM.IV);

    }

}

Пожалуйста, дайте мне знать решение, чтобы избежать этого исключения. Как избежать символа %?

Шифрование/дешифрование дает недопустимый символ в строке Base-64


person Community    schedule 16.07.2009    source источник


Ответы (1)


Откуда точно %? Он не должен быть частью возвращаемого значения метода Encrypt.

Я предполагаю, что у вас есть что-то, выполняющее URL-кодирование вашего зашифрованного текста. Если бы вы могли рассказать нам больше о том, где находится % и как вы получили эту строку, это очень помогло бы.

(Кроме того, вы должны использовать операторы using для всех потоков и т. д., а не закрывать их явно; также ваша попытка/поймать несколько бессмысленна. Однако это побочные проблемы.)

person Jon Skeet    schedule 16.07.2009