プログラム教えて下さい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ada

プログラム教えて下さい

#1

投稿記事 by ada » 9年前

ある英単語の組(英単語 AND 英単語)をシーザー暗号で何文字かずらし
その後CBCモードで暗号化した文字
0x66, 0xa, 0x79, 0x54, 0x10, 0x59, 0x18,0x33, 0x45, 0x1f, 0x6f, 0x15, 0x61, 0x7bという結果が表示されるプログラムがあります。

そこでCBCモードで暗号化した文字を復号化し英単語の組を見つけるという課題です。
文字列の鍵は123
初期ベクトルは10で実行されたそうです。

シーザー暗号を直すことはできるのですが
復号ができずに困っています。

よろしくお願いします。

Aozora0630
記事: 85
登録日時: 9年前
住所: 日本
連絡を取る:

Re: プログラム教えて下さい

#2

投稿記事 by Aozora0630 » 9年前

課題の丸投げは厳禁です。

って前のスレ(違う人の)を見ても書いてあるのにね。

課題の丸投げじゃない!と主張するのなら途中まででもいいのでコードを乗せないと駄目です。

ada

Re: プログラム教えて下さい

#3

投稿記事 by ada » 9年前

暗号化のプログラムは
試行錯誤しながらなんとかできたのですが
それをベースに復号化しようと試みましたが
どの部分をいじればよいのか分からず‥


ソースです
#include <stdio.h>

/* シーザー暗号化の鍵 (何文字ずらすか) */
unsigned char key = 123;

/* CBCモードの「初期化ベクトル」の値 */
unsigned char initial_vector = 10;

/* 平文を格納するための変数 */
unsigned char plainText[256] = "ait AND yakusa";

/* 暗号文を格納するための変数 */
unsigned char cipherText[256];

// --- シーザー暗号による暗号化処理
unsigned char encrypt(unsigned char x, unsigned char key) {
return((x + key) % 128);
}

// --- toplevel
int main(int argc, char *argv[]) {
int i, len;
unsigned char tmp;

// 暗号化
tmp = initial_vector;
len = 0;
for(i = 0; plainText != '¥0'; i++) {
cipherText = encrypt(tmp ^ plainText, key);
tmp = cipherText;
len++;
}

// 暗号化の結果表示:以下を表示する
printf("Result of encryption: ");
for(i = 0; i < len; i++) {
printf("0x%x", cipherText);
if(i < len-1) {
printf(", ");
}
}
printf("¥n");

return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: プログラム教えて下さい

#4

投稿記事 by みけCAT » 9年前

CBCモードのシーザー暗号の解読プログラムは過去ログにありました。
http://dixq.net/forum/viewtopic.php?f=3&t=15353
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る