暗号化の対象となる数値Aの入力を受け付ける受付ステップと、任意の値よりなるランダムキーを決定するランダムキー決定ステップと、入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理ステップと、所定回数だけ前記関数処理ステップに数値を入力する関数入力ステップであって、初回の入力の際には、前記第1の数値として前記数値Aと、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記関数処理ステップにて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する関数入力ステップと、前記関数処理ステップにて数値を出力した出力回数をカウントするカウントステップと、前記関数入力ステップにて入力した第1の数値に付いている符号が所定の符号である場合に、前記カウントステップにてカウントした出力回数を記憶させる記憶ステップと、前記関数処理ステップにて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成ステップと、前記記憶ステップにて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成ステップと、前記ランダムキーに基づいて第3の暗号を作成する第3の暗号作成ステップとをコンピュータに実行させる、暗号化プログラム。第1、第2、および第3の暗号の入力を受け付ける暗号受付ステップと、前記第2の暗号に基づいて出力回数を解読する出力回数解読ステップと、前記第3の暗号に基づいてランダムキーを解読するランダムキー解読ステップと、入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理ステップと、前記出力回数解読ステップにて解読した出力回数に基づいて決定された回数だけ前記逆関数処理ステップに数値を入力する逆関数入力ステップであって、初回の入力の際には、前記第1の数値として前記第1の暗号に基づく数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、前記第1の数値として前記逆関数処理ステップにて前回出力された数値と、前記第2の数値として前記ランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力ステップと、前記逆関数処理ステップにて数値を出力した回数をカウントする逆関数カウントステップと、前記逆関数処理ステップにて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読ステップとをコンピュータに実行させる、暗号解読プログラム。しかしながら、上記従来の暗号化技術および暗号解読技術では、1つの数値A1には1つの決まった数値A2が対応するため、数値A1と数値A2との関係から暗号化方法および暗号解読方法が解明されやすく、安全性が低かった。また、暗号化方法および暗号解読方法が解明されると、その暗号化方法および暗号解読方法を使用することはもはやできなかった。本発明は、上記課題を解決するものであり、その目的は、安全性の高い暗号化プログラムおよび暗号解読プログラムを提供することである。本発明の一の局面に従う暗号化プログラムは、暗号化の対象となる数値Aの入力を受け付ける受付ステップと、任意の値よりなるランダムキーを決定するランダムキー決定ステップと、入力された第1および第2の数値に所定の関数処理を施して数値を出力する関数処理ステップと、所定回数だけ関数処理ステップに数値を入力する関数入力ステップであって、初回の入力の際には、第1の数値として数値Aと、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として関数処理ステップにて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する関数入力ステップと、関数処理ステップにて数値を出力した出力回数をカウントするカウントステップと、関数入力ステップにて入力した第1の数値に付いている符号が所定の符号である場合に、カウントステップにてカウントした出力回数を記憶させる記憶ステップと、関数処理ステップにて最終回に出力された数値に基づいて第1の暗号を作成する第1の暗号作成ステップと、記憶ステップにて記憶させた出力回数に基づいて第2の暗号を作成する第2の暗号作成ステップと、ランダムキーに基づいて第3の暗号を作成する第3の暗号作成ステップとをコンピュータに実行させる。本発明の他の局面に従う暗号解読プログラムは、第1、第2、および第3の暗号の入力を受け付ける暗号受付ステップと、第2の暗号に基づいて出力回数を解読する出力回数解読ステップと、第3の暗号に基づいてランダムキーを解読するランダムキー解読ステップと、入力された第1および第2の数値に所定の逆関数処理を施して数値を出力する逆関数処理ステップと、出力回数解読ステップにて解読した出力回数に基づいて決定された回数だけ逆関数処理ステップに数値を入力する逆関数入力ステップであって、初回の入力の際には、第1の数値として第1の暗号に基づく数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力し、以降の回の入力の際には、第1の数値として逆関数処理ステップにて前回出力された数値と、第2の数値としてランダムキーを構成する少なくとも一部の数字とを入力する逆関数入力ステップと、逆関数処理ステップにて数値を出力した回数をカウントする逆関数カウントステップと、逆関数処理ステップにて最終回に出力された数値に基づいて暗号化の対象となった数値Aを解読する数値A解読ステップとをコンピュータに実行させる。本発明によれば、安全性の高い暗号化プログラムおよび暗号解読プログラムを提供することができる。以下、本発明の実施の形態について、図面を用いて説明する。[暗号化および暗号解読装置の構成]図1は、本発明の一実施の形態における暗号化および暗号解読装置の構成を模式的に示すブロック図である。なお、本実施の形態においては、暗号化および暗号解読装置が計算機である場合に付いて示すが、暗号化および暗号解読装置は関数電卓やPCPersonalComputerなどであってもよい。図1を参照して、本実施の形態における暗号化および暗号解読装置としての計算機10は、CPU1と、RAM2と、ROM3と、HDD4と、モニタなどの表示部5と、キーボードやマウスなどの操作部6とを含む。CPU1は、所定の処理を行なうことにより、RAM2、ROM3のデータの読み込みや、RAM2、ROM3へのデータの書き込みを行なう。RAM2は、CPU1のメインメモリである。RAM2は、CPU1が制御プログラムを実行するときに必要なデータを記憶するためなどに用いられる。ROM3は、たとえばフラッシュROMである。ROM3には、暗号化プログラムや暗号解読プログラムなどの計算機10の動作を行なうための各種プログラムと、各種固定データとが格納されている。ROM3は、書換え不可能なものであってもよい。HDD4は、各種データを記憶する記憶装置である。表示部5は、ユーザが視認可能な表示画面を表示する。操作部6はユーザからの各種入力を受け付ける。特に操作部6は、暗号化処理および暗号解読処理の実行や、暗号化処理および暗号解読処理に用いられる数値の入力などをユーザから受け付ける。[暗号化処理および暗号解読処理の概要]図2は、本発明の一実施の形態における暗号化処理を概略的に示す図である。図2を参照して、本実施の形態における暗号化処理においては、計算機10は、ユーザから暗号化の対象となる数値以降、数値Aと記すと、外キーとの入力を受け付ける。そしてCPU1は、入力された数値Aおよび外キーに基づいて演算を行い、プロトコルキーと、暗号1と、暗号2とを出力する。この暗号化処理には、外キーおよび数値Aの他、ランダムキーと内内キーとが用いられる。外キーは、暗号化処理および暗号解読処理の際にユーザによって入力されるキーである。ランダムキーは、暗号化処理を実行する度に計算機10によって決定される、任意の数字よりなるキーである。内内キーは、暗号化プログラムおよび暗号解読プログラム内ROM3内に定数として設定されているキーである。なお、内内キーの代わりに内内キーの土台が暗号化プログラム内に設定されており、暗号化処理および暗号解読処理の際に外キーと内内キーの土台とに基づいて内内キーが演算されてもよい。図3は、暗号化処理の際のプロトコルキー、暗号1、および暗号2の作成方法を概略的に示す図である。aはプロトコルキーの作成方法を示す図であり、bは暗号1および暗号2の作成方法を示す図である。図3aを参照して、計算機10のCPU1は、外キーと内内キーとに基づいて内キーを作成し、続いてCPU1は、作成した内キーと、外キーと、ランダムキーとに基づいてプロトコルキーを作成する。プロトコルキーは暗号解読処理の際に用いられる情報ランダムキーなどの情報を示すキーである。図3bを参照して、CPU1は、数値Aとランダムキーとに基づいて前暗号1以降、暗号1の土台と称することがあるおよび前暗号2以降、暗号2の土台と称することがあるを演算し、続いてCPU1は、作成した前暗号1および2と、内キーとに基づいて暗号1および2を演算する。暗号1および2とは数値Aを暗号化したキーである。図4は、本発明の一実施の形態における暗号解読処理を概略的に示す図である。図4を参照して、本実施の形態における暗号解読処理において、計算機10は、プロトコルキーと、暗号1および2と、外キーとの入力を受け付ける。そしてCPU1は、入力されたプロトコルキー、暗号1および2、および外キーに基づいて演算を行い、数値Aを出力する。この暗号化処理には内内キーがさらに用いられる。図5は、暗号解読処理の際の数値Aの解読方法を概略的に示す図である。aはランダムキーの解読方法を示す図であり、bは解読したランダムキーを用いた数値Aの解読方法を示す図である。図5aを参照して、計算機10のCPU1は、外キーと内内キーとに基づいて内キーを解読し、続いてCPU1は、作成した内キーと、外キーと、プロトコルキーとに基づいてランダムキーを解読する。図5bを参照して、続いてCPU1は、暗号1および2と、内キーとに基づいて前暗号1および2を解読し、解読した前暗号1および2と、解読したランダムキーとに基づいて数値Aを解読する。[暗号化処理]図6は、計算機のCPUが実行する暗号化処理のフローチャートである。本実施の形態においては、数値A、外キー、内内キー、および内キー以下、処理に用いられる数値と記す場合があるの各々は、特に断りがない限り、小数第1位から小数第10位まで10桁の数値として取り扱われる。具体的には、たとえば処理に用いられる数値が10桁の9の数字のみからなる場合には、0.9999999999という数値として取り扱われる。なお、処理に用いられる数値の桁数および小数点の位置は任意であり、処理に用いられる数値は整数としてつまり9999999999という数値として取り扱われてもよい。各処理で実行される演算においては、端数に対して四捨五入、切捨て、または切上げなどの処理が適宜なされてもよい。図6を参照して、始めに計算機10のCPU1は、10桁の外キーと、暗号化の対象となる10桁の数値Aとの入力を促すメッセージを表示部5の画面に表示させ、操作部6を通じて外キーおよび数値Aの入力をユーザから受け付けるS1。次にCPU1は、しるしをつける個数Zを決定するS3。個数Zは、後述する暗号ループ2号図10において用いられる数値である。個数Zとしてはたとえば2~15の中から任意の値が決定される。決定された個数Zの値はたとえばRAM2などに記憶される。次にCPU1は、10桁のランダムキーの土台を決定するS5。ランダムキーの土台の値としては、たとえば0.0000000000~0.9999999999の中から任意の値が決定され、暗号化処理の実行の度に異なる値が決定される。続いてCPU1は、外キーと、暗号化プログラム内に予め登録設定されている10桁の内内キーの土台とに基づいて、10桁の内内キーを作成するS7。なお、内内キーの土台の代わりに内内キーが暗号化プログラム内に設定されている場合には、ステップS7の処理は省略される。次にCPU1は、後述する暗号ループ1号図9を用いて、外キーと内内キーとに基づいて10桁の内キーを作成するS9。続いてCPU1は、後述する暗号ループ2号図10を用いて、数値Aとランダムキーの土台とに基づいて、暗号1および2の土台と、正式なランダムキーとを作成するS11。その後CPU1は、正式なランダムキーと、外キーと、内キーとに基づいてプロトコルキーを作成しS13、暗号1の土台に基づいて暗号1を作成しS15、暗号2の土台と内キーとに基づいて暗号2を作成しS17、処理を終了する。なお、ステップS7、S9、S11、S13、S15、およびS17の処理としては、四則演算、平方根、対数、累乗など各種の演算を単独でまたは組み合わせたものを採用することができる。図7は、図6の各ステップにおいて得られる数値を模式的に示す図である。なお、図7に示された数値には、その一部がアスタリスクを用いて省略されているものがある。図7を参照して、内内キーおよび内キーは、外キーおよび数値Aに基づいて生成されるものであるため、ランダムキーに依存せず、外キーおよび数値Aの組合せが同じであれば常に同じ数値となる。一方、暗号として出力されるプロトコルキー、暗号1および暗号2の各々は、外キーおよび数値Aに加えてランダムキーの土台またはランダムキーを用いて生成されるため、暗号化処理を実行する度に異なる数値となる。図8は、図6のステップS9の詳細を示すサブルーチンである。図8を参照して、図6のステップS9においてCPU1は、10桁の外キーを10個の数字に分けS31、10桁の内内キーを10個の数字に分けるS33。次にCPU1は、外キーの10個の数字の各々と、内内キーの10個の数字の各々とに基づいて、演算の基となる10個の数値を作成するS35。続いてCPU1は、ステップS35にて得られた10個の数値を、暗号ループ1号を用いて相互に演算することにより、10桁の数字よりなる内キーの土台を作成するS37。そしてCPU1は、ステップS37にて得られた内キーの土台に基づいて、10桁の内キーを作成しS39、リターンする。図9は、暗号ループ1号および解読ループ1号として用いられる表の一例を示す図である。暗号ループ1号および解読ループ1号では同じ処理が行われる。なお図9の表においては、M51~M55の欄にのみ数値が示されているが、実際にはM01~M55の全ての欄に数値が記入される。図9を参照して、たとえば外キーが0.9988776655であり、かつ内内キーが0.6554一部省略である場合、CPU1は、外キーにおける最上桁の数字9と、内キーにおける最上桁の数字6とを所定の演算方法にて演算することによって、演算の基となる10個の数値のうち1つ目の数字を作成し、その数字を表中M01の欄に記入する。次にCPU1は、外キーにおける上から2番目の桁の数字9と、内キーにおける上から2番目の桁の数字5とを所定の演算方法にて演算することによって、演算の基となる10個の数値のうち2つ目の数値を作成し、その数値を表中M02の欄に記入する。同様の方法でCPU1は、外キーの各桁の数字と内キーの各桁の数字とを用いて残り8個の数値を作成し、それぞれの数値を表中M03~M10の各々の欄に記入する。次に暗号ループ1号を用いた演算が開始される。CPU1は、M11の欄の表中左上にあるM01の欄の数値と、M11の欄の表中左下にあるM02の欄の数値とを所定の演算方法たとえば2つの数値の差を求める方法にて演算し、演算結果の数値をM11の欄に記入する。同様の方法でCPU1は、M12~M19の各欄に関して、各欄から見て表中左上の数値と表中左下の数値とを演算し、演算結果の数値をM12~M19の各欄に記入する。これにより、暗号ループ1号を用いた1回の演算が終了する。続いてCPU1は、M11~M19の欄の演算方法と同様の方法で、M11~M19の各欄の数値を用いてM20~M27の各欄に数値を記入し、M20~M27の各欄の数値を用いてM28~M34の各欄に数値を記入し、M28~M34の各欄の数値を用いてM35~M40の各欄に数値を記入し、M35~M40の各欄の数値を用いてM41~M45の各欄を記入する。続いてCPU1は、M41~M45の各欄の数値を用いてM46~M49の各欄を記入し、M46~M49の各欄の数値を用いてM50~M52の各欄を記入し、M50~M52の各欄の数値を用いてM53およびM54の各欄を記入し、M53およびM54の各欄の数値を用いてM55の欄を記入する。このようにして暗号ループ1号を用いた演算を、記入する欄が1つになるまで繰り返す結果、図9に示すM01~M55の各欄に数値が記入される。次にCPU1は、図9の表において、最後に得られた5つの数値であるM51~M55の各々の欄の数値から下2桁の数字を抜き出し、抜き出した計10個の数字を組み合わせたものを内キーの土台とする。たとえばM51~M55の各々の欄の数値が、M55:-8802、M54:4853、M53:-3949、M52:-2427、およびM51:2426であった場合、それぞれ02、53、49、27、26という数値が抜き出され、0.0253492726という内キーの土台が形成される。なお、図9に示す暗号ループ1号を用いた内キーの土台の作成方法はあくまでも一例であり、内キーの土台および内キーは別の方法で作成されてもよい。また図9においては、M52~M55の欄の数字に基づいて内キーの土台が作成される場合に付いて示したが、内キーの土台は図9における別の欄の数字に基づいて作成されてもよい。図10は、図6のステップS11の詳細を示すサブルーチンである。図10を参照して、図6のステップS11においてCPU1は、暗号ループ2号の現在の実行回数を示す回数Rの値と、しるしを付けた個数Tの値との各々を0に設定する。そしてCPU1は、ステップS5にて得られた10桁のランダムキーの土台を、10の位から小数第8位までの数値つまり、ab.cdefghija~jは数字という形の数値に変形し、これを現在のランダムキーとして設定するS41。次に暗号ループ2号を用いた演算が開始される。暗号ループ2号は、入力された数値に所定の関数処理を施して数値を出力するものである。CPU1は、暗号化の対象となる10桁の数値Aを、暗号ループ2号において演算の基となる数値Dとして設定しS43、現在のランダムキーの中から整数部分を構成する数値Xを選ぶS45。数値Dおよび数値Xは、暗号ループ2号に入力される2つの数値となる。続いてCPU1は、現在のランダムキーにおいて、数値Xとして使用した2つの数字を現在のランダムキーの末桁に移動し、かつ小数第1位および第2位であった数字が整数部分を構成する数値となるよう整数部分以外の各桁の数字が2桁繰り上がるよう、ランダムキーを更新するS47。たとえば、数値Xを選択する前のランダムキーがab.cdefghijであった場合には、更新後のランダムキーはcd.efghijabとなる。これにより、次回ステップS45において選ばれる数値Xは、今回選ばれた数値Xとは別の数値となる。つまり、ab→cd→ef→gh→ij→ab→という順で数値Xが選ばれる。なお、ステップS45およびS47においては、ランダムキーを更新せずにランダムキーから同じ数字を選択し続けてもよいし、2桁以上の数値を選択してもよい。なお、ステップS47を省略してランダムキーを更新せずに、ランダムキーから特定の同じ数値たとえばabを選択し続けてもよいし、数値Xとして1つあるいは3つ以上の数字よりなる数値を選択してもよい。続いてCPU1は、数値Dが負数であるか否かを判別するS49。ステップS49において数値Dが正数であると判別した場合にはS49でNO、CPU1は、数値Dの対数値を求めS71、ステップS45にて選ばれた数値Xを関数Gxに入力して得られる数値GXを、この対数値に対して作用させるS73。なお、関数Gxは四則演算、平方根、自然対数、累乗などどのような演算を含んでいてもよく、数値GXの作用のさせ方も、たとえば対数値と数値GXとの四則演算を行うなど、どのようなものであってもよい。次にCPU1は、ステップS73において得られた演算結果対数値に数値GXを作用させることによって得られた数値が数値Dとなるように、数値Dを更新しS75、現在のループの回数Rに1を加えるS77。これにより、暗号ループ2号を用いた1回の演算が終了する。更新後の数値Dは、暗号ループ2号から出力された数値であり、暗号ループ2号を用いた次回の演算において入力される数値となる。その後CPU1はステップS45の処理へ進み、暗号ループ2号を用いた演算を繰り返す。ステップS49において数値Dが負数であると判別した場合にはS49でYES、CPU1は、数値Dからマイナスを取って正数としS51、正数にした数値Dの対数値を求めS53、ステップS55の処理へ進む。ここで、上記のステップS71の処理、ならびにステップS51およびS53の処理は、関数Fx=|logx|に数値Dを入力して数値FDを得る処理である。logxの底はどのような数字でもよく、logxはたとえば自然対数や常用対数であってもよい。また、関数Fxはどのような関数であってもよい。続いてCPU1は、ステップS45にて選ばれた数値Xを関数Gxに入力して得られた数値GXを、この対数値に対して作用させるS55。次にCPU1は、ステップS55において得られた演算結果対数値に数値GXを作用させることによって得られた数値が数値Dとなるように、数値Dを更新しS57、現在のループの回数Rにしるしを付けつまり、現在のループの回数Rを記憶させS59、現在のループの回数R、および現在のしるしを付けた個数Tに1を加えるS61。更新後の数値Dは、暗号ループ2号から出力された数値であり、暗号ループ2号を用いた次回の演算が行われる場合には、暗号ループ2号を用いた次回の演算において入力される数値となる。次にCPU1は、しるしを付けた個数Tが個数Zに達したか否かを判別するS63。これにより、暗号ループ2号を用いた1回の演算が終了する。ステップS63において、しるしを付けた個数Tが個数Zに未だ達していないと判別した場合S63でNO、CPU1はステップS45の処理へ進み、暗号ループ2号を用いた演算を繰り返す。ステップS63において、しるしを付けた個数Tが個数Zに達したと判別した場合S63でYES、CPU1は、最後に得られた数値D最終回に暗号ループ2号から出力された数値Dを暗号1の土台としS91、しるしを付けたZ個のループの回数Rと、内キーとに基づいて、暗号2の土台を作成するS93。続いてCPU1は、現在のランダムキーを正式なランダムキーとしS95、処理を終了する。なお、上述の暗号ループ2号においては、数値Dが負数である場合にしるしを付ける代わりに、数値Dが正数である場合に現在のループの回数Rにしるしを付けてもよい。図11は、図10における数値Dの変化の一例を示す図である。なお、図11では、しるしをつける個数Zが5である場合の数値Dの変化を示しており、図11に示された数値Dには、その一部がアスタリスクを用いて省略されているものがある。図11を参照して、暗号ループ2号の現在の実行回数である回数Rが0である場合には、正数である0.4433221100という数値Dが暗号ループ2号に入力され、-0.80に更新された数値Dが暗号ループ2号から出力される。回数Rが1である場合には、負数である-0.80という数値Dが入力され、-0.21に更新された数値Dが出力される。この場合、回数R=1にしるしが付けられ、個数Tが1とされる。回数Rが2である場合には、負数である-0.21という数値Dが入力され、-1.44に更新された数値Dが出力される。この場合、回数R=2にしるしが付けられ、個数Tが2とされる。その後、暗号ループ2号の処理が繰り返され、回数Rが6である場合には、負数である-0.01という数値Dが入力され、-4.31790552141に更新された数値Dが出力される。この場合、回数R=6にしるしが付けられ、個数Tが5とされる。その結果個数Tが個数Zに達すると、最終回に出力された数値Dである-4.31790552141が暗号1の土台とされ、しるしが付けられた回数Rである1、2、3、5、および6という数値に基づいて、暗号2の土台が作成される。[暗号解読処理]図12は、計算機のCPUが実行する暗号解読処理のフローチャートである。図12を参照して、始めに計算機10のCPU1は、暗号1、暗号2、およびプロトコルキーの入力を促すメッセージを表示部5の画面に表示させ、暗号1、暗号2、およびプロトコルキーの入力をユーザから受け付けるS201。次にCPU1は、外キーの入力を促すメッセージを表示部5の画面に表示させ、外キーの入力をユーザから受け付けるS203。続いてCPU1は、暗号化処理におけるステップS7図6と同様の方法で、外キーと、暗号化プログラム内に事前に登録設定されている10桁の内内キーの土台とに基づいて、10桁の内内キーを作成するS205。なお、内内キーが暗号解読プログラム内に設定されている場合には、ステップS205の処理は省略される。次にCPU1は、暗号化処理におけるステップS9図6と同様の方法で、解読ループ1号を用いて、外キーと内内キーとに基づいて10桁の内キーを作成するS207。続いてCPU1は、プロトコルキーと、外キーと、内キーとに基づいてランダムキーを作成しS209、暗号1に基づいて暗号1の土台を作成しS211、暗号2と内キーとに基づいて暗号2の土台を作成するS213。ステップS209、S211およびS213の各々においては、暗号化処理におけるステップS13、S15およびS17の各々において実行される演算とは逆の演算が行われる。たとえばステップS15において暗号1の土台に関数Hxを作用させることで暗号1を作成した場合には、ステップS211においては暗号1に逆関数H1xを作用させることで暗号1の土台が作成される。その後CPU1は、後述する解読ループ2号図13を用いて、暗号1および2の土台と、正式なランダムキーとに基づいて、暗号化の対象となった数値Aを作成しS215、処理を終了する。図13は、図12のステップS215の詳細を示すサブルーチンである。図13を参照して、図12のステップS215においてCPU1は、暗号2の土台と内キーとに基づいて、しるしを付けたZ個のループの回数Rを抽出するS221。ステップS221においては、図10のステップS93において実行される演算とは逆の演算が行われる。続いてCPU1は、ステップS221で抽出されたZ個のループの回数Rに基づいて決定され、たとえば最も大きい回数Rに回数Uを設定するS223。回数Uは、解読ループ2号における現在の実行回数を示すものである。たとえばステップS221において1、2、3、5、および6という回数Rの値が抽出された場合には、これらの回数Rのうち最も大きい回数であえる6に回数Uが設定される。次に解読ループ2号を用いた演算が開始される。解読ループ2号は、入力された数値に所定の逆関数処理を施して数値を出力するものである。CPU1は、暗号1の土台を、解読ループ2号において演算の基となる数値Eとして設定するS225。続いてCPU1は、現在のランダムキーにおいて、ランダムキーの末桁の2つの数字が整数部分を構成し、かつ整数部分であった2つの数字が小数第1位および第2位である数値となるよう末2桁以外の各桁の数字が2桁繰り下がるよう、ランダムキーを更新するS227。たとえば、現在のランダムキーがab.cdefghijであった場合には、更新後のランダムキーはij.abcdefghとなる。続いてCPU1は、現在のランダムキーつまり更新後のランダムキーの中から、整数部分を構成する数値Xを選ぶS229。数値Eおよび数値Xは、解読ループ2号に入力される2つの数値となる。次にCPU1は、現在のループの回数Uにしるしが付けられているか否かを判別するS231。たとえばステップS221において1、2、3、5、および6という回数Rの値が抽出された場合において、現在のループの回数Uが6であるときは、現在のループの回数Uにしるしが付けられていると判別される。ステップS231において、現在のループの回数Uにしるしが付けられていると判別した場合S231でYES、ステップS229にて選ばれた数値Xを逆関数G1xに入力して得られる数値G1Xを、数値Eに対して作用させるS233。逆関数G1xは、図10のステップS55およびS73にて使用された関数Gxの逆関数である。続いてCPU1は、ステップS233において得られた演算結果数値Eに数値G1Xを作用させることによって得られた数値を指数部分とし、かつステップS53およびS73において使用された対数の底を整数部分とする数値を求めるS235。次にCPU1は、ステップS235にて得られた数値にマイナスを付けてこの数値を負数にしS237、ステップS237において得られた数値が数値Eとなるように、数値Eを更新するS239。更新後の数値Eは、解読ループ2号を用いた次回の演算が行われる場合には、解読ループ2号を用いた次回の演算において入力される数値となる。その後CPU1は、現在のループの回数Uから1を引きS241、ステップS261の処理へ進む。ステップS231において、現在のループの回数Uにしるしが付けられていないと判別した場合S231でNO、ステップS229にて選ばれた数値Xを逆関数G1xに入力して得られる数値G1Xを、数値Eに対して作用させるS251。続いてCPU1は、ステップS251において得られた演算結果数値Eに数値G1Xを作用させることによって得られた数値を指数部分とし、かつステップS53およびS73において使用された対数の底を整数部分とする数値を求めるS253。次にCPU1は、ステップS253にて得られた数値が数値Eとなるように、数値Eを更新するS255。更新後の数値Eは、解読ループ2号を用いた次回の演算が行われる場合には、解読ループ2号を用いた次回の演算において入力される数値となる。その後CPU1は、現在のループの回数Uから1を引きS257、ステップS261の処理へ進む。ステップS261においてCPU1は、現在のループの回数Uが0になったか否かを判別するS261。これにより、解読ループ2号を用いた1回の演算が終了する。ステップS261において、現在のループ回数が未だ0になっていないと判別した場合S261でNO、CPU1はステップS227の処理へ進み、解読ループ2号を用いた演算を繰り返す。現在のループ回数が0になったと判別した場合S261でYES、CPU1は、最後に得られた数値D最終回に解読ループ2号から出力された数値Dを数値Aとして決定しS263、処理を終了する。[実施の形態の効果]本実施の形態によれば、暗号化処理にランダムキーを用いることで、暗号化の対象となる1つの数値から互いに異なる第1の暗号暗号1、第2の暗号暗号2、および第3の暗号プロトコルキーが出力される。また、暗号化の対象となる数値が同じであっても、暗号化処理を施す度に、毎回異なった第1~第3の暗号の組が出力される。これにより、暗号化方法および暗号解読方法が解明されにくくなり、安全性を向上することができる。また、入力された外キーと、暗号化装置内に記憶された内内キーとに基づいて内キーを作成し、外キーと内キーとにさらに基づいて第3の暗号を作成することにより、万が一第1~第3の暗号が第三者に盗まれた場合であっても、その第三者による解読を防ぐことができる。すなわち、第1~第3の暗号とともに外キーおよび内内キーを入手しなければ、第三者は暗号を解読することができない。加えて、万が一暗号化プログラムまたは暗号解読プログラムが露見しても、内内キーを変更することで、暗号化プログラムまたは暗号解読プログラムを再び安全に使用することができる。[その他]上述の実施の形態においては、暗号化処理および暗号解読処理の両方を行う暗号化および暗号解読装置について示したが、本発明の装置は、暗号化処理および暗号解読処理のうちいずれか一方のみの処理を行うものであってもよい。上述の実施の形態における暗号化処理および暗号解読処理においては、外キー、内内キー、および内キーが用いられなくてもよく、暗号化処理および暗号解読処理は、暗号化の対象となる数値Aの入力を受け付け、第1~第3の暗号を出力するもの、または第1~第3の暗号の入力を受け付け、暗号化の対象となる数値Aを出力するものであればよい。上述の実施の形態における暗号化装置および暗号解読装置は、たとえば以下の形態などで利用可能である。PCと計算機との通信の際には、PCは、PCが搭載する暗号化装置を用いてデータの暗号化処理を行い、暗号化したデータを計算機へ送信する。計算機は、計算機が搭載する暗号解読装置を用いて、受信したデータの暗号解読処理を行い、元のデータを得る。また、買い手であるユーザがインターネットショッピングにおいて商品を購入する場合において、買い手側PCからインターネットを通じて売り手側PCへクレジットカードに関する情報を送信するときに、買い手側PCは、買い手側PCが搭載する暗号化装置を用いてクレジットカードに関する情報の暗号化処理を行い、暗号化した情報を売り手側PCへ送信する。売り手側PCは、売り手側PCが搭載する暗号解読装置を用いて、受信した情報の暗号解読処理を行い、元のクレジットカードに関する情報を得る。上述の実施の形態における処理は、ソフトウェアにより行なっても、ハードウェア回路を用いて行なってもよい。また、上述の実施の形態における処理を実行するプログラムを提供することもできるし、そのプログラムをCD-ROM、フレキシブルディスク、ハードディスク、ROM、RAM、メモリカードなどの記録媒体に記録してユーザに提供することにしてもよい。プログラムは、CPUなどのコンピュータにより実行される。また、プログラムはインターネットなどの通信回線を介して、装置にダウンロードするようにしてもよい。上述の実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。