Ungültige Länge für einen Base-64 char-array oder einen string. AES in C#

Im immer die Fehlermeldung " Ungültige Länge für einen Base-64 char-array oder einen string.' auf dieser Linie

rm.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(text)).Split(',')[0]);

Hier ist der code:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        textBox2.Enabled = false;
    }

    private void label2_Click(object sender, EventArgs e) { }

    private void button1_Click(object sender, EventArgs e)
    {
        String s = generateKey(256);
        textBox2.Text = s;
    }

    private String generateKey(int keySize)
    {
        RijndaelManaged rm = new RijndaelManaged();
        rm.KeySize = keySize;
        rm.BlockSize = 128;
        rm.Mode = CipherMode.CBC;
        rm.Padding = PaddingMode.PKCS7;
        rm.GenerateIV();
        String iv = Convert.ToBase64String(rm.IV);
        rm.GenerateKey();
        String key = Convert.ToBase64String(rm.Key);
        string completeKey = iv + "," + key;

        return Convert.ToBase64String(ASCIIEncoding.UTF8.GetBytes(completeKey));
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (textBox2.Text == "" || textBox2.Text == null)
        {
            MessageBox.Show("Please generate a key!");
        }
        else
        {
            String key = textBox2.Text;
            String strToBeEncoded = textBox1.Text;
            String s = encryptAES(strToBeEncoded, key, 256);
            outputBox.Text = s;
        }
    }

    private String encryptAES(String text, String key, int keySize)
    {
        RijndaelManaged rm = new RijndaelManaged();
        rm.KeySize = keySize;
        rm.BlockSize = 128;
        rm.Mode = CipherMode.CBC;
        rm.Padding = PaddingMode.PKCS7;
        rm.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(text)).Split(',')[0]);
        rm.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[1]);
        byte[] plainText = ASCIIEncoding.UTF8.GetBytes(text);
        ICryptoTransform crypto = rm.CreateEncryptor();
        byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length);
        return Convert.ToBase64String(cipherText);
    }
}
  • möchten Sie vielleicht, dies zu betrachten, ich denke, das ist ein dupe: stackoverflow.com/questions/15419542/...
  • Vielleicht sollte man splitten Sie den Ausdruck in mehrere Linien und bestimmen, wo genau das problem ist. Dem Aufruf Convert.FromBase64String ausfällt?
  • Verdammt, jetzt habe ich new kids on the block, in meinem Kopf. Deine Schuld.
  • IVs sind in der Regel nicht gehalten, mit dem Schlüssel, sondern mit dem Chiffretext, der zwar nicht die Frage, die iv mit dem gleichen Schlüssel soll nicht wiederverwendet werden je. FYI
InformationsquelleAutor rshah | 2013-07-30
Schreibe einen Kommentar