c#で暗号化システムを作ろうとしています。これは暗号化のためのコードです。
public static void EncryptFile(string inFile, string outFile, string @inkey)
{
try
{
UnicodeEncoding ue = new UnicodeEncoding();
byte[] key = ue.GetBytes(inkey);
FileStream fsEncrypt = new FileStream(outFile, FileMode.Create);
RijndaelManaged rmCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsEncrypt, rmCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inFile, FileMode.Open);
int data;
while((data=fsIn.ReadByte()) != 1){
cs.WriteByte((byte)data);
}
fsIn.Close(); cs.Close(); fsEncrypt.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Fail to encrypt", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
さて、このコードは実行するたびに例外をスローします。
指定された初期化ベクトル (IV) は、このアルゴリズムのブロック サイズと一致しません
これに関する他の議論を読み、バイト数に問題があると言っています (この関数に渡されるキーの長さは 255 です)。しかし、キーを 16 バイトだけにしてみましたが、まだ機能しません。
いくつかのトラブルシューティングの後、この部分が次のことがわかりました。
CryptoStream cs = new CryptoStream(fsEncrypt, rmCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
例外をスローします。理由がわかりません。誰でも助けることができますか?