対称暗号化のために CNG の AES に AES-OFB ラッパーを実装しようとしています。
理解できない問題が発生しました... AES アルゴリズム ハンドル (BCRYPT_AES_ALGORITHM) を作成し、AES キーをインポートしました。次に、平文/暗号文の XOR で使用する 16 バイトのキーストリームを生成しようとします。このメカニズムを初めて実行すると、keyStreamPtr はランダムなバイト ストリームから別のストリームに変更されますが、これを 3 回目に行うと (キーストリームの 16 バイトの 3 番目のセット)、同じ出力が得られ始め、それが永久に発生します。
status = BCryptEncrypt((BCRYPT_KEY_HANDLE)keyHandle,
keyStreamPtr,
keyStreamLength,
NULL, //no padding
NULL, // no IV
0, // no IV
keyStreamPtr,
keyStreamLength,
&Length,
0); // no option flags
誰もこのようなものを見たことがありますか?なぜ AES は、入力された平文と完全に同一の暗号文を返すのでしょうか? 繰り返しますが、これは AES-OFB 実装のためのものです...おそらく私は何か間違ったことをしていますか?