C言語:元に戻る数

こんばんは。武田です。
朝夕は涼しくなってきました。

今日は不思議な計算式を紹介します。
暗号に使えるかもしれません。
秘密の数値を第三者に知られることなく相手に伝えることができます。

C言語の簡単なプログラムです。

#include <stdio.h>
int main(void){
    // Your code here!
    int x;
    
    printf("number? ");
    scanf("%d", &x);
    
    x = x ^ 0x1234;
    printf("[%d]\n", x);
    
    return 0;
}

これだけです。

実行イメージ

number? 123 ←適当な数値を入力してエンター
[4687] ← ある数値が表示される

もう一度実行する

number? 4687 ← 先ほど表示された数値を入力してみる
[123] ← あら不思議!もとの数値に。

実行するとキーボードから数値入力を促されるので、適当な数値を入力します。
するとある数値が画面に表示されます。これが暗号です。
もう一度実行します。
先ほどの暗号を入力すると元の数値が表示されます。

仕組みは…と言いたいところですが、プログラムを見て確認してみてください。

x = x ^ 0x1234;

の部分です。ちなみに0x1234のところは何でもOKです。

ビット演算をする必要があります。2進数に直してから計算式に当てはめてみるとわかると思います。
C言語は数値を2進数で計算することが出来るので、使い方によっては面白いことができると思います。

ではまた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です