Ich schrieb einen Code zum Verschlüsseln und Entschlüsseln von Beispieltext mit dem AES-Algorithmus. Wenn ich auf die erste Schaltfläche klicke, möchte ich die Zeichenfolge verschlüsseln, die in der Textbox1 angezeigt wird, und für den zweiten Klick auf die Schaltfläche muss der entschlüsselte Wert in Textfeld2 angezeigt werden. AES-Algorithmus Fehler in C#
Dies ist der Code dafür:
public partial class _Default : Page
{
public byte[] key = null; public byte[] iv = null; public byte[] bytesToEncrypt = null; public static byte[] encryptedBytes = null; public byte[] decryptedBytes = null;
protected void Page_Load(object sender, EventArgs e)
{
RijndaelManaged aesAlg = new RijndaelManaged();
aesAlg.GenerateKey();
aesAlg.GenerateIV();
key = aesAlg.Key;
iv = aesAlg.IV;
}
protected void Button1_Click(object sender, EventArgs e)
{
// original bytes
bytesToEncrypt = new byte[TextBox2.Text.ToString().Length * sizeof(char)];
encryptedBytes = CryptoAes.Encrypt(bytesToEncrypt, key, iv);
TextBox1.Text = Convert.ToBase64String(encryptedBytes);
byte[] bytesToEncrypt1 = new byte[TextBox2.Text.Length];
decryptedBytes = CryptoAes.Decrypt(encryptedBytes, key, iv);//working here.
}
protected void Button2_Click(object sender, EventArgs e)
{
var s = Convert.FromBase64String(TextBox1.Text);
decryptedBytes = CryptoAes.Decrypt(encryptedBytes, key, iv);
TextBox2.Text = System.Text.Encoding.Unicode.GetString(decryptedBytes);//not working
}
}
internal sealed class CryptoAes
{
public static byte[] Encrypt(byte[] data, byte[] key, byte[] iv)
{
byte[] encryptedData = null;
if (data == null)
throw new ArgumentNullException("data");
if (data == key)
throw new ArgumentNullException("key");
if (data == iv)
throw new ArgumentNullException("iv");
using (RijndaelManaged aesAlg = new RijndaelManaged())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Padding = PaddingMode.Zeros;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length);
}
return encryptedData;
}
public static byte[] Decrypt(byte[] data, byte[] key, byte[] iv)
{
byte[] decryptedData = null;
if (data == null)
throw new ArgumentNullException("data");
if (data == key)
throw new ArgumentNullException("key");
if (data == iv)
throw new ArgumentNullException("iv");
using (RijndaelManaged aesAlg = new RijndaelManaged())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Padding = PaddingMode.Zeros;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
decryptedData = decryptor.TransformFinalBlock(data, 0, data.Length);
}
return decryptedData;
}
}
für die erste Schaltfläche klicken Sie auf die Entschlüsselung funktioniert prima. Aber wenn ich auf die zweite Schaltfläche klicke, zeigt der entschlüsselte Text einige Junk-Zeichen.
Um dies herauszufinden, habe ich die verschlüsselten Bytes als statische und wiederverwendung, wenn ich auf die zweite Schaltfläche, aber immer noch die gleiche Ausgabe mit Junk-Werten. Ich frage mich, wie die gleiche Eingabe die richtige Ausgabe liefert, wenn ich auf die erste Schaltfläche klicke.
Kann mir jemand helfen, das zu klären?
Also, Sie haben Eingang, haben Ausgang erwartet, haben Sie auch Code .. dann, was wird die Hilfe sein, die Sie von uns erwarten? Gibt es einen Fehler? –
Beide Tasten sind zum Entschlüsseln? * "klicken Sie auf die Entschlüsselung funktioniert einwandfrei" * –
ersten Klick auf die Schaltfläche, die Entschlüsselung funktioniert gut. Problem ist mit dem zweiten Knopf klicken. Die erste Schaltfläche dient zum Verschlüsseln und die zweite zum Entschlüsseln. Wenn ich die Logik für die Entschlüsselung des Codes auch in der ersten Taste schreibe, funktioniert es gut. –