トップページ – アルゴリズムとデータ構造編 – 【その他のアルゴリズム】第3章
問題① XOR暗号を、平文が整数でなく、文字列となるように実装してください。
1文字ずつ取り出し、1バイト単位で XOR演算を行えば、平文が文字列でも適用できます。
#include <stdio.h>
#include <string.h>
static void xor_encryption(char* str, size_t len, int key);
static void print(const char* str, size_t len);
int main(void)
{
char data[256];
char buf[32];
int key;
puts( "元の値を入力してください。" );
fgets( data, sizeof(data), stdin );
puts( "鍵となる値を入力してください。" );
fgets( buf, sizeof(buf), stdin );
sscanf( buf, "%d", &key );
size_t len = strlen( data );
xor_encryption( data, len, key );
puts( "暗号結果は次のようになりました。" );
print( data, len );
xor_encryption( data, len, key );
puts( "復号結果は次のようになりました。" );
print( data, len );
return 0;
}
/*
XOR暗号
引数:
str: 暗号化(または復号化) する文字列。
len: 引数str の文字列の長さ。
key: 鍵。
引数str の内容が直接変更される。
*/
void xor_encryption(char* str, size_t len, int key)
{
for( size_t i = 0; i < len; ++i ){
str[i] ^= key;
}
}
/*
文字列出力
引数:
str: 文字列。
len: 引数str の文字列の長さ。
*/
void print(const char* str, size_t len)
{
for( size_t i = 0; i < len; ++i ){
printf( "%c", str[i] );
}
printf( "\n" );
}実行結果:
``` {.result} 元の値を入力してください。 abcde 鍵となる値を入力してください。 123 暗号結果は次のようになりました。
| はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
| X で ポスト/フォロー | LINE で送る | noteで書く |
|
|
管理者情報 | プライバシーポリシー |