このディレクトリの索引

#  p=1231, q=4567を選びます。
#  eに65537
#  e^-1=d mod φ(n) のdを計算して求めます。
#      d=3988493
#  となります。
#  
#  暗号化と複合化の手順
#  公開鍵:N = 1231 * 4567
#  E = 65537
#  d = 3988493
#  文字コード:「a〜z」=01〜26、「A〜Z」=27〜52、空白=53
#  文書:This Anser

p(1231).

q(4567).

'E'(65537).

d(3988493).

n(5621977).


'RSA暗号化'(_文書,_暗号文字コードならび) :-
        文書を文字コードで数値化します(_文書,_文字コードならび),
        'RSA方式によるコード暗号化'(_文字コードならび,_暗号文字コードならび).

'RSA復号化'(_暗号文字コードならび,_文書) :-
        'RSA方式によるコード復号化'(_暗号文字コードならび,_文字コードならび),
        文字コードならびから文書を復元します(_文字コードならび,_文書).

'RSA方式によるコード暗号化'(_文字コードならび,_暗号コードならび) :-
        'E'(_E),
        n(_n),
        findall(_暗号コード,(
                    member(_文字コード,_文字コードならび),
                    _暗号コード is _文字コード ^ _E mod _n),
                _暗号コードならび).

'RSA方式によるコード復号化'(_暗号文字コードならび,_文字コードならび) :-
        d(_d),
        n(_n),
        findall(_複合コード,(
                    member(_暗号文字コード,_暗号文字コードならび),
                    _複合コード is _暗号文字コード ^ _d mod _n),
                _文字コードならび).

文書を文字コードで数値化します(_文書,_文字コードならび) :-
        findall(_文字コード,(
                    sub_atom(_文書,_,1,_,_文字),
                    文字コード(_文字,_文字コード)),
               _文字コードならび).                    

暗号コードを暗号文に変換(_暗号コードならび,_暗号文) :-
        findall(_暗号文字,(
                    member(_暗号コード,_暗号コードならび),
                    文字コード(_暗号文字,_暗号コード)),
                _暗号文字ならび),
        atom_chars(_暗号文,_暗号文字ならび).


文字コードならびから文書を復元します(_文字コードならび,_文書) :-
        findall(_文字,(
                    member(_文字コード,_文字コードならび),
                    文字コード(_文字,_文字コード)),
               _文字ならび),
        atom_chars(_文書,_文字ならび).                    

文字コード(_文字,_コード) :-
        char_code(_文字,_コード).