このアーカイブのメッセージを得るには、アーカイブの名前をテキストボックスに入力します。埋め込み文字が来ると解読の問題が発生する
私はテキストボックスにパスワードを書き込みます
I塩を計算します。
private void button1_Click_1(object sender, EventArgs e)
{
String message;
String password;
String result;
String resultSalt;
String nameResult;
byte[] salt;
password = textBox2.Text;
nameResult = textBox3.Text;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);
resultSalt = Convert.ToBase64String(salt);
if (radioButton1.Checked == true)
{
message = readArchive();
result = Encrypt(message,password,resultSalt);
try
{
File.WriteAllText(nameResult, result);
MessageBox.Show("Encrypt Ok");
}
catch
{
MessageBox.Show("Error");
}
}
else
{
message = readArchive();
result = Decrypt(message,password,result);
try
{
File.WriteAllText(nameResult, resultSalt);
MessageBox.Show("Decrypt OK");
}
catch
{
MessageBox.Show("Error");
}
}
}
方法を暗号化
public static string Encrypt(string message, string pass, string salt)
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
DeriveBytes rgb = new Rfc2898DeriveBytes(pass, Encoding.Unicode.GetBytes(salt), 9);
byte[] key = rgb.GetBytes(aes.KeySize >> 3);
byte[] iv = rgb.GetBytes(aes.BlockSize >> 3);
aes.Mode = CipherMode.CBC;
aes.Key = key;
aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] data = Encoding.Unicode.GetBytes(message);
byte[] dataencrypt = encryptor.TransformFinalBlock(data, 0, data.Length);
return Convert.ToBase64String(dataencrypt);
}
方法は
public static string Decrypt(string message, string pass, string salt)
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
DeriveBytes rgb = new Rfc2898DeriveBytes(pass, Encoding.Unicode.GetBytes(salt), 9);
byte[] key = rgb.GetBytes(aes.KeySize >> 3);
byte[] iv = rgb.GetBytes(aes.BlockSize >> 3);
aes.Mode = CipherMode.CBC;
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] data = Convert.FromBase64String(message);
byte[] datadecrypt = decryptor.TransformFinalBlock(data, 0, data.Length);
return Encoding.Unicode.GetString(datadecrypt);
}
方法readArchive
private string readArchive()
{
String nameArchive = textBox1.Text;
String text = "";
try
{
text = File.ReadAllText(@nameArchive);
}
catch
{
MessageBox.Show("Error.");
}
return text;
}
を復号化]ボタンをクリックします
エラーライン
byte[] datadecrypt = decryptor.TransformFinalBlock(data, 0, data.Length);
System.Core.dll
で型「System.Security.Cryptography.CryptographicException」追加情報の未処理の例外:文字の間にパディングが有効でないとできません除去される。
詳細が必要です。 例外メッセージは何ですか?内部の例外があり、それは何ですか? – GhostTW
'Unicode.GetBytes(salt)'は弱いですが、暗号化と一致する必要があります。 –
Decryption _and_ Encryptionコードで完全な[mcve]を書いてください。 –