簡易的な暗号 解答ページ | Programming Place Plus アルゴリズムとデータ構造編【その他のアルゴリズム】 第3章

トップページアルゴリズムとデータ構造編【その他のアルゴリズム】第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で書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る