トップページ – アルゴリズムとデータ構造編 – 【その他のアルゴリズム】第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( data, sizeof(data), stdin );
fgets
( "鍵となる値を入力してください。" );
puts( buf, sizeof(buf), stdin );
fgets( buf, "%d", &key );
sscanf
size_t len = strlen( data );
( data, len, key );
xor_encryption( "暗号結果は次のようになりました。" );
puts( data, len );
print
( data, len, key );
xor_encryption( "復号結果は次のようになりました。" );
puts( data, len );
print
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 ){
[i] ^= key;
str}
}
/*
文字列出力
引数:
str: 文字列。
len: 引数str の文字列の長さ。
*/
void print(const char* str, size_t len)
{
for( size_t i = 0; i < len; ++i ){
( "%c", str[i] );
printf}
( "\n" );
printf}
実行結果:
``` {.result} 元の値を入力してください。 abcde 鍵となる値を入力してください。 123 暗号結果は次のようになりました。
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |