こんにちは私は暗号化/復号化の部分を学んでいます。私はAES 128ビットを使用してECB暗号モードとPKCS7パディングを使用する暗号化/復号化の2つの方法を作成しました。ECB暗号モードアルゴリズムを使用するAES 128ビットは、無効なキーで正しく復号化されますか?
以下はコードです。
public class EncClass
{
public string Encrypt(string text)
{
byte[] src = Encoding.UTF8.GetBytes(text);
byte[] key = Encoding.ASCII.GetBytes("contactcentre");
RijndaelManaged aes = new RijndaelManaged();
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
using (ICryptoTransform encrypt = aes.CreateEncryptor(key, null))
{
byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);
encrypt.Dispose();
return Convert.ToBase64String(dest);
}
}
public string Decrypt(string text)
{
byte[] src = Convert.FromBase64String(text);
RijndaelManaged aes = new RijndaelManaged();
byte[] key = Encoding.ASCII.GetBytes("contactcentrT");
aes.KeySize = 128;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.ECB;
using (ICryptoTransform decrypt = aes.CreateDecryptor(key, null))
{
byte[] dest = decrypt.TransformFinalBlock(src, 0, src.Length);
decrypt.Dispose();
return Encoding.UTF8.GetString(dest);
}
}
}
暗号化して、私はcontactcentreキーに合格したと復号に私はcontactcentrTに合格していることに注意してください。その場合、適切な暗号化と復号化を行っています。
var encString = encClass.Encrypt(@"manoj");
var decString = encClass.Decrypt(encString);
私の両キーは一致していませんが、それでも正しく動作しています。これがどうして起こるか知りたかっただけですか?
を渡し、その後
aes.Key
最初にそれを割り当て、 。キーがまったく使われていないと言っていますか?それでは、どんな鍵が使われていますか? – zaph@zaph aes.CreateEncryptorにはバグがあり、128ビット未満のサイズのキー(これはAESにとって無効なキーです)を許可します。いくつかのそのようなキーでは例外をスローし、OPキーのように他のものに対しては無効なキーでアルゴリズムを実行します。その場合に何かが起こる可能性があります。私は答えで起こっているかもしれないと思っていることを述べましたが、それは問題ではありません。無効なキーでAESを実行するのは間違っており、それによって生成されたものは無関係のゴミではありません。 – Evk
無効なキーを使用すると不明な結果が得られ、KDFを使用する必要があることに同意します。まだここには何か他のことがあります。 OPはサンプル出力を提供していない。保証で行うことができる唯一の答えは、正しいサイズのキーを使用することです。他のすべては推測しており、その質問には適用されない情報があります。 – zaph