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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie versuchen, ziehen Sie die IV aus dem string werden Sie zu verschlüsseln.
Ändern versuchen:
zu:
RijndaelManaged
undICryptoTransform
Objekte. Noch besser, wenn Sie gewickelt wurden, in einigenUsing
Aussagen.