ある英単語の組(英単語 AND 英単語)をシーザー暗号で何文字かずらし
その後CBCモードで暗号化した文字
0x66, 0xa, 0x79, 0x54, 0x10, 0x59, 0x18,0x33, 0x45, 0x1f, 0x6f, 0x15, 0x61, 0x7bという結果が表示されるプログラムがあります。
そこでCBCモードで暗号化した文字を復号化し英単語の組を見つけるという課題です。
文字列の鍵は123
初期ベクトルは10で実行されたそうです。
シーザー暗号を直すことはできるのですが
復号ができずに困っています。
よろしくお願いします。
プログラム教えて下さい
-
- 記事: 85
- 登録日時: 9年前
- 住所: 日本
- 連絡を取る:
Re: プログラム教えて下さい
課題の丸投げは厳禁です。
って前のスレ(違う人の)を見ても書いてあるのにね。
課題の丸投げじゃない!と主張するのなら途中まででもいいのでコードを乗せないと駄目です。
って前のスレ(違う人の)を見ても書いてあるのにね。
課題の丸投げじゃない!と主張するのなら途中まででもいいのでコードを乗せないと駄目です。
Re: プログラム教えて下さい
暗号化のプログラムは
試行錯誤しながらなんとかできたのですが
それをベースに復号化しようと試みましたが
どの部分をいじればよいのか分からず‥
ソースです
#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;
}
試行錯誤しながらなんとかできたのですが
それをベースに復号化しようと試みましたが
どの部分をいじればよいのか分からず‥
ソースです
#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;
}
Re: プログラム教えて下さい
CBCモードのシーザー暗号の解読プログラムは過去ログにありました。
http://dixq.net/forum/viewtopic.php?f=3&t=15353
http://dixq.net/forum/viewtopic.php?f=3&t=15353
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)