Cipher Block Chaining(CBC)モードを使用してAESをコード化しようとしています。私はかなり構造が正しいと確信しています(以前の暗号文をAESに送る前に新しい平文をxoringし、逆に暗号を解除すると元の平文に暗号化されたファイルを復号化することが問題です。それは、それがxoredされている方法と関係があるかもしれません。私は私のAESアルゴリズムが正しいことを知っています。私は2つの文字の配列を一緒にxor私はあなたが2つのものを一緒にxoringの結果を取るし、私はその機能を確認したときに答えて、あなたが戻ってもう一方のオペランドを取得する必要があります。しかし、それはそのように動作しません。Cでのxoringに関する問題
私は平文でそれを読んで、前の暗号文と
//THERE IS A RANDOM INITIALIZATION VECTOR BEFORE GETTING INTO THE WHILE LOOP
while ((bytes_in = (read(fin, plaintext, AES_BLOCK))))
{
for (count = 0; count < AES_BLOCK; count++){
xor[count] = (plaintext[count])^(ciphertext[count]);
}
//AES STUFF NOT SHOWN SO THERE ISN'T MUCH CODE
status = write (fdsk, ciphertext, strlen (ciphertext));
for (count =0; count < AES_BLOCK; count++)
plaintext[count] = '0';
}
それをXORどこ
解読一部:
bytes = read(fin, previous_CT, AES_BLOCK); //reads in the initialization vector
while(total_bytes < aes_length)
{
bytes = read(fin, ciphertext, AES_BLOCK);
for(count = 0; count < AES_BLOCK; count++){
plaintext[count] = (xor[count])^(previous_CT[count]);
printf("plaintext %d", plaintext[count]);
}
}
は私の問題/質問をまとめると:私は私が行う必要がある知りません文字をXORするものがあれば 私は思ったんだけど。私は正しい方法でやっているようですが、何らかの理由で正しい結果が得られません。私はそれが私のプログラムを台無しにしている情報を読んでいる方法かもしれないかどうかも疑問に思っています。私を助けてください! ありがとう!
1つのデバッグ手法は、コードからすべてのAESを削除し、それを試みることです。あなたのコードは、それぞれのブロックを前のブロック(またはIV)とxoringするだけです。これはデバッガで簡単に実行できるようになり、おそらく問題がどこにあるのかを簡単に確認することができます。それがうまくいくと、AESコードを取り戻すことができます。 –
復号化中になぜ「フィン」から2行ずつ読んでいるのでしょうか。 – Elalfer
これはどのようなシステムですか?バイナリモードでファイルをオープンしていましたか?(UNIXシステムでは問題ありません) 'xor'、' plaintext'、ciphertext'、 'previous_CT'の種類は何ですか? –