AESアルゴリズムを使用してサンプルテキストを暗号化および復号化するためのコードを作成しました。最初のボタンをクリックすると、textbox1に表示される文字列を暗号化し、2回目のボタンをクリックすると、復号化された値がtextbox2に表示されます。CESのAESアルゴリズムエラー
これはそのためのコードです:復号化が正常に動作している]をクリックし、最初のボタンのために
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;
}
}
。しかし、2番目のボタンをクリックすると、復号化されたテキストにいくつかの迷惑な文字が表示されます。
が、これは私が静的としてencryptedBytesを作っ把握し、私は2番目のボタンをクリックしたときにそれを再利用し、まだジャンク値と同じ出力します。私は最初のボタンをクリックしたときに、同じ入力が正しい出力をどのように与えるのだろうかと思います。誰でも私にこれを整理するのを助けることができますか?私はあなたがしようとしているものの作業コードを持っています
だから、あなたは入力を持っていて、あなたもコードを持っていることを期待しています..あなたが私たちから期待しているものは何ですか?何かエラーがありますか? –
両方のボタンは解読用ですか? * "ボタンをクリックすると復号化が正常に機能しています" * –
最初のボタンをクリックすると、復号化がうまくいきます。 2番目のボタンをクリックすると問題が発生します。最初のボタンは暗号化用で、2番目のボタンは復号化用です。最初のボタンにコードを解読するロジックを書いてもうまくいきます。 –