我收到错误'Base-64 char数组或字符串的长度无效。'在这一行
rm.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(text)).Split(',')[0]);
以下是代码:
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);
}
}
答案 0 :(得分:2)
您正试图将IV从您要加密的字符串中拉出来。
尝试更改:
rm.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(text)).Split(',')[0]);
为:
rm.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[0]);