Шифрование / дешифрование дает недопустимый символ в строке Base-64 - PullRequest
0 голосов
/ 16 июля 2009

Я работал с алгоритмом шифрования / дешифрования 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

1 Ответ

1 голос
/ 16 июля 2009

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

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

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

...