
void encryptCBC(int data[],int dsize,int iv[]){ //暗号化
int tmp[4];
int i,j;
KeyExpansion(key);
for (i = 0; i < dsize; i += 4) {
memcpy(tmp,&data[i],16);
for(j=0;j<4;j++){
tmp[j]^=iv[j]; //16バイトごとに区切ったデータとベクタの排他的論理和
}
Cipher(tmp); //暗号化
memcpy(&data[i],tmp,16);
memcpy(iv,tmp,16); //ベクタの更新
}
}
void decryptCBC(int data[],int dsize,int iv[]){ //復号
int tmp[4];
int v[4];
int i,j;
KeyExpansion(key);
for (i = 0; i < dsize; i += 4) {
memcpy(tmp,&data[i],16);
invCipher(tmp); //復号
if(i==0){ //初期ベクタとの排他的論理和
for(j=0;j<4;j++){
tmp[j]^=iv[j];
}
}else{ //更新したベクタとの排他的論理和
for (j=0;j<4;j++){
tmp[j]^=v[j];
}
}
memcpy(v,&data[i],16); //ベクタの更新
memcpy(&data[i],tmp,16);
}
}
AESのCBCモードでの暗号化、復号を実装しようとしています。
2ブロック目以降は正しく復号できているのですが、1ブロック目が元の値に戻りません。
どこが間違っているかどなたか教えていただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入力された数字を大きい順に並...
-
式は定数値が必要です」という...
-
「指定されたキャストは有効で...
-
struct tanka_kosuu kosuu[10];...
-
プログラミングについて質問で...
-
至急お願いします。 乱数を出す...
-
C言語 並び替え
-
異なる文字列のマッチングを、D...
-
Haskellで関数を合成しようとす...
-
次のプログラムでは、配列yの中...
-
プログラミングの授業のペーパ...
-
プログラミングペーパーテスト ...
-
C言語の課題です
-
C言語でDxlibを使って3x3の奇数...
-
タイムスタンプの増加量を測定...
-
【C言語】このプログラム各行の...
-
C++で二重ループを用いたプロ...
-
c言語についておしえてください
-
C言語教えてください!
-
C#初心者です。 ポッポが、飴と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
エラー 添字が付けられた値が、...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
式は定数値が必要です」という...
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
構造体の勉強中です 合計点の高...
-
数字列を3桁ごとにカンマで区切...
-
return 1L
-
std::set<int> で、ある値が何...
-
C#のコンパイルエラーCS0120に...
-
比較回数と交換回数表示について
-
C言語で分からないところがあり...
おすすめ情報