- ベストアンサー
C言語でAESのEBCモードの実装について
- C言語でAESのEBCモードを実装しようとしていますが、1ブロック目しか暗号化、復号できません。
- プログラム内には暗号鍵や初期ベクトルが定義されており、KeyExpansion関数やCipher関数、invCipher関数などが実装されています。
- encryptEBC関数とdecryptEBC関数では、データを16バイトごとに暗号化、復号化していますが、何らかの理由で1ブロック目しか処理できないようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>すいませんコメントつけたほうがよかったんですね… コメントを書かれいない場合、そこで何をやりたいのか他者には伝わりませんよ。 >そこは渡されたdataを16ワードごとに区切って一度tmpに入れて暗号化、それからもとのdataの位置にそれを戻してやるという動作をさせたくて書きました。 memcpyをちゃんと調べてみましょう。 第2引数にint *を渡してるからといって第3引数のintを指定した個数分(今回でいえばintを16個分)という意味になったりしません。 memcpyをちゃんと調べれば >memcpy(data,init,16); >memcpy(data2,init2,isize); などもおかしいことがわかると思います。
その他の回答 (2)
- uyama33
- ベストアンサー率30% (137/450)
unsigned char init[16]; int i = 0; int c; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } while( (c = fgetc( fp )) != EOF ){ init[i] = c; i = i+1; } ファイルが大きいと、暴走しますよ。 init[16]; 16しかない所に何個入れますか さらに、char に int を入れると、とっても窮屈ですよ。 http://www.amazon.co.jp/The-Design-Rijndael-Information-Cryptography/dp/3540425802 をお勧めします。 この本の巻末にある、ソースコードに間違いが少しあるので自分で修正してね。
- Tacosan
- ベストアンサー率23% (3656/15482)
とりあえずコメントを書け. 多分, 根本原因は あなたがメモリ周りに関して十分な理解をしていないこと だろう. たとえばだが, for (i = 0; i < dsize; i += 16) { memcpy(tmp,&data[i],16); Cipher(tmp); memcpy(&data[i],tmp,16); } がどういう動作をするか日本語で説明してくれるかな?
補足
すいませんコメントつけたほうがよかったんですね… そこは渡されたdataを16ワードごとに区切って一度tmpに入れて暗号化、それからもとのdataの位置にそれを戻してやるという動作をさせたくて書きました。