• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:暗号利用モードの実装)

C言語でAESのEBCモードの実装について

このQ&Aのポイント
  • C言語でAESのEBCモードを実装しようとしていますが、1ブロック目しか暗号化、復号できません。
  • プログラム内には暗号鍵や初期ベクトルが定義されており、KeyExpansion関数やCipher関数、invCipher関数などが実装されています。
  • encryptEBC関数とdecryptEBC関数では、データを16バイトごとに暗号化、復号化していますが、何らかの理由で1ブロック目しか処理できないようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.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)
回答No.2

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)
回答No.1

とりあえずコメントを書け. 多分, 根本原因は あなたがメモリ周りに関して十分な理解をしていないこと だろう. たとえばだが, for (i = 0; i < dsize; i += 16) { memcpy(tmp,&data[i],16); Cipher(tmp); memcpy(&data[i],tmp,16); } がどういう動作をするか日本語で説明してくれるかな?

Whalen
質問者

補足

すいませんコメントつけたほうがよかったんですね… そこは渡されたdataを16ワードごとに区切って一度tmpに入れて暗号化、それからもとのdataの位置にそれを戻してやるという動作をさせたくて書きました。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • iPhone16で特定のゲームアプリ使用時にノイズが発生。
  • 変換アダプタAD-C35SDBKが原因か判断がつかない。
  • 後継版のMPA-C35DはiPhone16に対応しているのか確認。
回答を見る

専門家に質問してみよう