Ich machte ein Verschlüsselungsprogramm mit Rijndael in C# nach dem Anschauen eines Videos in youtube.Es ist sehr einfach.Wie ein Wort zu entschlüsseln, die mehr als 16 Buchstaben in Rijndael Verschlüsselung haben
Interface picture Ich kann 64-Bit- und 128-Bit-Schlüssel eingeben. 192-Bit-Schlüssel sind jedoch nicht erlaubt (Warum?).
Und wenn ich 64-Bit-Schlüssel verwenden, wenn ich ein Wort verschlüsseln und versuchen, es zurück zu entschlüsseln, es entschlüsselt nur Wort mit Zeichenanzahl < = 16. Es ist die Anzahl der Zeichen mehr als 16 Fehlermeldungen ausgelöst "Padding ist Ungültig und kann nicht entfernt werden ".
Das gleiche gilt für einen 128-Bit-Schlüssel. Nur das Wort mit der Zeichenanzahl < = 32 wird zurück entschlüsselt. Ansonsten wird dieselbe Fehlermeldung angezeigt.
Hier ist eine sommerliche eine klare Sicht auf die Frage für Verschlüsselung
// need using System.Security.Cryptography;
// using System.IO;
public Form1()
{
InitializeComponent();
desObj = Rijndael.Create();
}
string cipherData;
byte[] chipherbytes;
byte[] plainbyte;
byte[] plainbyte2;
byte[] plainkey;
SymmetricAlgorithm desObj;
private void button2_Click(object sender, EventArgs e)
{
try
{
cipherData = textBox1.Text;
plainbyte = Encoding.ASCII.GetBytes(cipherData);
plainkey = Encoding.ASCII.GetBytes(textBox4.Text);
desObj.Key = plainkey;
//choose any method
desObj.Mode = CipherMode.CBC;
desObj.Padding = PaddingMode.PKCS7;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desObj.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(plainbyte, 0, plainbyte.Length);
cs.Close();
chipherbytes = ms.ToArray();
ms.Close();
textBox2.Text = Encoding.ASCII.GetString(chipherbytes);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
und der decyption Code ist
Problem Summery picture Hier ist der Code zu nehmen
private void button3_Click(object sender, EventArgs e)
{
try
{
MemoryStream ms1 = new MemoryStream(chipherbytes);
CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(), CryptoStreamMode.Read);
cs1.Read(chipherbytes, 0, chipherbytes.Length);
plainbyte2 = ms1.ToArray();
cs1.Close();
ms1.Close();
textBox3.Text = Encoding.ASCII.GetString(plainbyte2);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Können Sie bitte die Stellen korrigieren, an denen ich Fehler gemacht habe? Es wäre eine große Hilfe! –
Warum? Haben Sie Probleme mit 'Convert.ToBase64String' und' Convert.FromBase64String'? Ich kann Ihnen bei den anderen Fragen nicht helfen, denn das wäre zu viel Arbeit. Warum verwenden Sie nicht einfach [RNCryptor] (https://github.com/RNCryptor/RNCryptor-cs), was all diese Probleme für Sie löst und sicher ist? –
Ich habe erwähnt, ich habe das von youtube kopiert! Ich habe wirklich keine Ahnung von Kryptographie. Das sind die Gründe. Aber ich brauche dieses Stück Code, um für eines meiner Projekte richtig zu funktionieren! :) –