公開鍵暗号化ライブラリ
FSCRYP32.DLL
ユーザーズガイド
Powered by FREEDOMSOFT 2003.05.17


 0.目次

 1.公開鍵暗号化ライブラリ  
 2.使用条件
 3.互換性
 4.公開鍵の概念
 5.利用されている技術
 6.FSCRYP32.DLLが提供する機能
 7.利用方法
   7.1 VisualC++からの使い方
   7.2 VisualBasicからの使い方
 8.リファレンス
   8.1 公開鍵暗号作成
   8.2 暗号化鍵作成
   8.3 復号化鍵取得
   8.4 テキスト暗号化
   8.5 テキスト復号化
   8.6 デジタル署名
   8.7 デジタル署名の検証
   8.6 戻り値一覧
 9.サポート
10謝辞


1.公開鍵暗号化ライブラリ
 FSCRYP32.DLLは、公開鍵暗号を利用できる、汎用暗号化ライブラリです。
 公開鍵暗号技術は、情報管理に置いて非常に重要な位置を占めております。
 その公開鍵暗号技術を簡単に利用していただくことを目的として開発いたしました。 
 
 


2.使用条件
 本公開鍵暗号化ライブラリFSCRYP32.DLLは、以下の使用条件に同意された方のみご利用する事ができます。
 使用条件に対してご質問・ご意見・ご要望などがございましたら、お気軽にFreedomSoftまでお問い合わせ下さい。
 
本ライブラリとは、FSCRYP32.DLLの事です。
SDKとは、特に断りが無い場合に限り、FSCRYP32.DLLとそれに添付されているドキュメント(本書を含む)、サンプルソース等を指します。
 
(1)免責事項
 本ライブラリ及びSDKを利用して得られた全ての結果に置いて、FreedomSoftは一切責任を負いません。技術的な問題が発見された場合も、FreedomSoft はそれを説明する義務を負いません。ただし、問題部分を修正する義務は放棄しません。
 発生した問題は、本ライブラリ及びSDKを使用した各自の責任の下で対処してください。
 
(2)著作権
 本ライブラリ及びSDKの著作権は、FreedomSoftが所持しております。
 FreedomSoftに無断で、一部または全体を改変しそれを公開することを禁止します。
 ただし、サンプルソース(本書に含まれるサンプルも含む)は版権フリーとします。
 
(3)開発時の注意
 本ライブラリを利用したプログラムには、プログラムのバージョン情報及びマニュアルなどの資料に、FreedomSoftの名称、FreedomSoftのトップページのURL(http://www.freedomsoft.net/)、本ライブラリを利用している事を必ず明記してください。
 
(4)プログラムの公開・頒布
 上記の(1)〜(3)に同意された方でオンラインソフト開発者(非法人に限る)の方は、無料で本ライブラリを利用していただく事ができます。また、本ライブラリを利用したプログラムと一緒に本ライブラリ単体を無制限数頒布する事ができます。
 なお、本ライブラリ単体の頒布は禁止いたします。
 
(5)SDKの頒布
 SDKをプライベートの範囲内で頒布を許可します。ただし、FreedomSoftが提供している形のままで頒布してください。また、不特定多数の方が入手できる状態にする事を禁止いたします。
 
(6)企業・官公庁・団体でのご利用
 企業・官公庁・団体の方で、事情により使用条件の一部に同意する事ができない場合で、本ライブラリを使用したい場合は、別途ライセンスを取得していただく必要がございます。ライセンス取得方法については、FreedomSoftへ直接お問い合わせ下さい。
 
(7)武器輸出等の規制
 本ライブラリは公開鍵暗号技術及び共通鍵暗号技術を搭載しております。そのため、日本国外または日本国国権の範囲以外で本ライブラリまたは本ライブラリを使用したソフトウェアを利用する場合、戦略物資輸出等の規制に抵触する可能性があります。
 
 


3.互換性
 FSCRYP32.DLLは、TextProtector-WEB3(以下、TP-WEB3)の暗号型式に対応しております。TP-WEB3で暗号化した文章は、FSCRYP32.DLLで復号化する事ができます。また、その逆も可能です。

TP-WEB3と互換性を持っている形式

1.128ビット以下の公開鍵データ
2.128ビット以下の鍵データ付きテキスト暗号文
3.通常テキスト暗号文
4.通常テキスト暗号文


 上記のデータは、TP-WEB3と相互利用が可能です。

TP-WEB3
http://www.freedomsoft.net/products/tpweb3/

 現在公開されている、PASSWORDS MANAGER、Thirteen-Ten Editor 、SUPER PROTECTORとの互換性はございません。

 
 


4.公開鍵暗号の概念
 本ライブラリを利用するに当たっては、公開鍵の基本的な概念を理解した上でご利用していただくことを前提として設計されています。そのため、開発を行う際に、公開鍵の基本的な概念を理解している必要があります。
 公開鍵暗号方式の概念については、数多くの書籍などに詳しく、そして分かりやすく紹介されています。よって、本書では公開鍵暗号の概念の詳細については解説いたしません。

 公開鍵暗号の基本的な考え方について、以下のページを用意しております。
(初心者向け)

公開鍵暗号って何?
http://www.freedomsoft.net/documents/publickey/index.html

 
 


5.利用されている技術
     FSCRYP32.DLLに搭載されている暗号技術は、以下の2種類です。

    Diffie-Hellman法(公開鍵暗号方式)
    配列カオス暗号法(共通鍵暗号方式)

     Diffie-Hellman法は、鍵の配送(鍵の共有)の機能しかもっていません。よって、暗号文を相手に送る場合は、共通鍵暗号方式と併用する必要があります。



6.FSCRYP32.DLLが提供する機能
 FSCRYP32.DLLが提供する機能は以下の5種類です。

・公開鍵の作成

 秘密鍵(文字情報)から公開鍵を作成します。
 
・暗号化鍵の作成
 公開鍵から暗号化鍵の作成を行います。
 出力は暗号化鍵と、鍵データの2つになります。
 
・復号化鍵の取得
 鍵データから秘密鍵を使って復号化鍵を取得します。
 違った秘密鍵を入力しても、復号化鍵を作成します。しかし、この復号化鍵は正確な物にはなりません。復号化鍵が正確であるかを検証するためには、テキスト復号化処理が成功するか確認する必要があります。

・テキスト暗号化
 データをテキスト暗号化処理を行います。
 テキスト暗号化処理は、最大64KBに制限されています。

・テキストのデジタル署名
 テキストのデジタル署名を行います。

・デジタル署名の検証
 デジタル署名の検証を行います。

 


7.利用方法
7.1 VisualC++からFSCRYP32.DLLの呼び出し方
 FSCRYP32.DLLでは、libファイルの提供を行っておりません。
 従って利用には、FSCRYP32.DLLを動的に呼び出して利用していたく必要がございます。

 動的に呼び出す場合は、以下の用に記述します。

例:MakePublicKeyCを呼ぶ場合
//サンプル ここから--------------------------
long lngret;

//DLLのハンドルを取得する。
HMODULE HDll = LoadLibrary("Fscryp32.dll");

if(!HDll) return (   0);
else      return (HDll);

//関数のポインタを宣言します。
long (*MakePublic)(char*, long, const char*, long);

//関数のポインタにMakePublicKeyC関数のポインタを代入します。
MakePublic = (long (*)(char*, long, const char*, long))
             GetProcAddress(HDll, "MakePublicKeyC");

//実際に関数のポインタから関数を利用します。
lngret = (*MakePublic)(&OutPut[0], 128, &SecretKey[0], 0);

//解放
(void)FreeLibrary(HDll);
//サンプル ここまで--------------------------
 

解説:
インクルードファイル

 VisualC++の場合は、明示的にインクルードファイルを指定しなくとも、GetProcAddressを使うことができます。
 それ以外のC言語環境(Borland社製など)は、windows.hをインクルードしてください。


DLLのハンドルを取得

 DLLを使う前に、DLLのハンドルを取得しておく必要があります。

HMODULE HDll = LoadLibrary(DLLファイルのファイル名);

 ハンドルの取得に成功した場合は、HDllが非0値に設定されます。
 失敗すると、HDllに0が入ります。

 
関数のポインタ宣言について
 関数のポインタを宣言する場合は、以下の書式を取ります。
戻り値の型  (*名前)(引数1, 引数2, 引数3,,,);
 
関数のポインタへの代入
 そして、DLL内部の関数を呼び出す場合は、まず、関数のポインタにDLLで使われている関数のポインタを割り当てる必要があります。
名前 = (戻り値の型(*)(引数1, 引数2, 引数3,,,))GetProcAddress(HDll, "関数名");
 
関数のポインタの利用
 関数のポインタを利用する場合は、以下のようにします。
変数 = (*名前)(引数1, 引数2, 引数3,,,);

解放

 関数を使い終わったら必ず解放しておきましょう。
FreeLibrary(HDll);
 
 
7.2 VisualBasicからの利用方法
 VisualBasicから利用する場合は、Declareステートメントを利用します。
 Declareステートメントを、Generalの部分に記述するだけで使えるようになります。追加するべきソースは、各機能のリファレンスに記載してありますので、そちらを参照してください。
 
 


8.リファレンス
8.1 公開鍵作成
MakePublicKey

 指定した秘密鍵から公開鍵を作成します。
 



VisualC++
long MakePublicKeyC(char*       PublicKey,   //作成された公開鍵
                    long          BitSize, //暗号強度
                    const char*    Secret//秘密鍵
                    long             Mode ); //パラメータ


VisualBasic
Declare Function MakePublicKeyB Lib "FSCRYP32.DLL" (ByVal PublicKey As String, ByVal BitSize as Long, ByVal Secret As String, ByVal Mode As Long) As Long
 

 



引数:
PublicKey
 作成された公開鍵が格納されます。
 バッファは、BitSize × 12 + 200バイト程度の容量が必要です。


BitSize

 公開鍵で使用される素数のビット数を指定します(これが直接暗号強度に関係します)。
 指定できるビット数は、64,128,192,256,384,512,768,1024です。それ以外の数値を設定すると、切り上げられます。1024より大きい数値を設定すると、1024になります。


Secret

 秘密鍵を設定します。秘密鍵は文字列を指定してください。


Mode

 将来利用します。現在では無視されます。


戻り値:
FS_ER_PUB_BADGEN 701
 不正な原始元が指定されています。
 公開鍵暗号処理時は、Diffie-Hellman法に基づいて処理されます。
 公開鍵生成過程で、原始元という数値を無作為に求めます。その時に、原始元を算出しきれない場合は、このエラーが返ってきます。
 考えられる原因として、使われている素数が素数でない可能性があります。
 デフォルトでは、このエラーが発生する確率は非常に無視できるほど低い確率です。


補足:
 暗号強度の目安は、使用する素数の大きさを2進数で表したとき何桁になるかを「暗号強度」と呼び、単位は[ビット]で表します。
 一般的にDiffie-Hellman法を利用した公開鍵暗号は、毎回異なった素数を用意する必要があると言われています。しかしながら、素数を見つけるのに膨大な時間がかかるので、FSCRYP32.DLLでは、各ビットごとに1つの素数しか利用することができません。
 将来的には、素数リストファイルを用意して、その中から無作為に選べるようします。
 なお、この機能が無いからといって直ぐに解読されるという事ではありません。素数が大きい数である場合は、ほとんど現在の段階では、128ビットを選択すれば実用上はほとんど問題がないと言えます。
 公開鍵を作る際には、Diffie-Hellman法で利用する、もう一つの原始元というパラメータは、無作為に選ばれます。そのため、同じ秘密鍵で公開鍵を作成しても、毎回異なった公開鍵が得られます。この公開鍵は、作る際に指定した秘密鍵で元に戻す事ができますので、実用上問題はありません。

 
 
8.2 暗号化鍵作成
MakeEncryptKey

 相手の公開鍵から、暗号化する際に使われる暗号化鍵と、鍵データを作成します。

 



VisualC++
long MakeEncryptKeyC(char*       KeyData,   //鍵データ
                     char*        ComKey,   //暗号化鍵
                     const char*   MyKey,   //現在は使用しない
                     const char*  HerKey,   //公開鍵
                     long           Mode ); //パラメータ


VisualBasic
Declare Function MakeEncryptKeyB Lib "FSCRYP32.DLL" (ByVal KeyData As String, ByVal ComKey as String, ByVal MyKey As String, ByVal HerKey As String, ByVal Mode As Long) As Long

 



引数:

KeyData

 鍵データを出力します。
 バッファは、公開鍵の暗号強度(ビット数)×16+200バイト程度の容量が必要です。


ComKey

 暗号化鍵を出力します。
 バッファは、公開鍵のビット数分+1の容量が必要です。


MyKey

 将来追加する機能で使います。現在は無視します。


HerKey

 相手の公開鍵を指定します。


Mode

 将来利用します。現在では無視されます。


戻り値:

FS_ER_PUB_BADPKHEAD 702

 YourKeyで指定された公開鍵が不正なフォーマット、または、公開鍵ではありません。


FS_ER_PUB_BADVALUES 704

 公開鍵の内部に不正な数値が使われています。可能性として、YourKeyで指定した公開鍵が破損している可能性があります。


補足:
 FSCRYP32.DLLで利用しているDiffie-Hellman法は、安全に相手と同じ鍵(文字列)を共有できる技術です。
 そのため、ComKeyには、両者(公開鍵を公開している者とプログラム側)が共有できる文字列が格納されます。
 この共有できる文字列を、テキスト暗号(TextEncrypt)に用いるパスワードに用いる事で、安全に暗号文の送付が可能になります。
 その時は、テキスト暗号文とともに、KeyDataも相手に送付する必要があります。

 
 
8.3 復号化鍵の取得
GetDecryptKey

 鍵データから、秘密鍵を用いて復号化鍵を作成します。
 なお、この復号化鍵は、誤った秘密鍵を入力しても作成されます。秘密鍵の正当性を検証するためには、TextDecryptが必要です。



VisualC++
long GetDecryptKeyC(char*        ComKey,   //復号化鍵
                    const char*  Source,   //鍵データ
                    const char*  Secret,   //秘密鍵
                    const char* YourKey,   //現在は無視します
                    long           Mode ); //パラメータ

VisualBasic
Declare Function MakeEncryptKeyB Lib "FSCRYP32.DLL" (ByVal ComKey As String, ByVal Source as String, ByVal Secret As String, ByVal YourKey As String, ByVal Mode As Long) As Long

 



解説:
 
ComKey
 復号化鍵が保存されます。
 バッファの最大容量は、鍵データの素数のビット数分必要になります。
 
Source
 鍵データを指定します。
 
Secret
秘密鍵を指定します。
 
YourKey
将来使用する物です。現在は無視されます。
 
Mode
将来使用します。現在は無視されます。


戻り値:

FS_ER_PUB_BADCKHEAD 703

 Sourceで指定した鍵データのヘッダが不正、または、鍵データが含まれていません。


FS_ER_PUB_BADVALUES 704

 公開鍵の内部に不正な数値が使われています。可能性として、YourKeyで指定した公開鍵が破損している可能性があります。


補足:
 鍵データより導き出される復号化鍵は、暗号鍵(鍵データが作られた時に得られた暗号化鍵)と全く同じでなければなりません。同じにするには、鍵データを作った時に使用した公開鍵の秘密鍵が、Secretに指定されていなければなりません。
 正確な秘密鍵がSecretに指定されいても、誤った秘密鍵がSecretに指定されていても、処理は継続されComKeyに復号化鍵が出力されます。
 ただし、この復号化鍵が暗号化鍵と等しい物であるかは、この機能だけでは検証することができません。
 そのため、その復号化鍵で暗号文が復号化できるか検証する必要があります。

 
 
8.4 テキスト暗号化
TextEncrypt

 データをテキスト暗号化します。
 データはテキストでなくても、バイナリデータでも処理可能です。
 暗号化されたデータは、全てキャラクターコード33以上125以下に変換されます。変換過程で、データを圧縮いたしますので、通常のテキストならば、約1.2倍〜1.5倍程度の情報量(ヘッダフッタが約100バイトほど付加します)になります。

 



VisualC++
long TextEncryptC(char*        CrypWord,    //処理結果
                  const char*    Source,    //原文
                  long          LngSize,    //処理容量
                  const char*    Passwd,    //パスワード
                  long             Mode );  //パラメータ

VisualBasic
Declare Function TextEncryptB Lib "FSCRYP32.DLL" (ByVal CrypWord As String, ByVal Source as String, ByVal LngSize As Long, ByVal Passwd As String, ByVal Mode As Long) As Long

 



解説:

CrypWord

 暗号化されたデータが保存されます。
 バッファは、最大でLngSize ×2 + 100程度確保する必要があります
 データを圧縮する関係から、返ってくるデータ容量が処理前に知ることができませんので、多目に確保する優にしてください。


Source

 原文の先頭のポインタを指定します。
 データは、バイナリデータでも処理可能です。


LngSize

 Sourceで指定したポインタから処理するべきバイト数を指定します。
 65536(64KB)以上の数値を設定すると、容量オーバーのエラーが返ってきます。


Passwd

 パスワードを指定します。
 21文字以上の文字列を設定すると、22文字以降は無視されます。


Mode

 現在は使用されません。


戻り値:

FS_ER_CR_OVERSIZE 503

 LngSizeで指定した数値が限界を超えました。65536以下の数値を設定してください。




補足:
     公開鍵暗号と併用する場合は、以下の処理を行ってください。
     
  1. 相手の公開鍵を入手。
  2. 相手の公開鍵からMakeEncryptKey関数で、暗号鍵ComKeyと鍵データKeyDataを作成。
  3. TextEncrypt関数のPasswdに暗号鍵ComKeyを指定する。

  4. 暗号文CrypWordと、鍵データKeyDataを相手に送付。

 
 
8.5 テキスト復号化
TextDecrypt

 TextEncryptで暗号化されたデータを復号化します。

 



VisualC++
long TextDecryptC(char*       DecrypWord,   //処理結果
                  long*          LngSize//結果容量
                  const char*     Source//暗号文
                  const char*     Passwd//パスワード
                  long              Mode );//未使用


VisualBasic
Declare Function TextDecryptB Lib "FSCRYP32.DLL" (ByVal DecrypWord As String, ByRef LngSize As Long, ByVal Source as String, ByVal Passwd As String, ByVal Mode As Long) As Long

 



解説:
DecrypWord
復号化された結果が保存されます。なお、暗号文に対して異なったパスワードを指定すると、ここには何も保存されません。


LngSize

復号化したデータの容量を格納します。


Source

暗号文を指定します。
なお、GetDecryptKeyと併用している場合は、同じ暗号文をSourceに割り当てても問題はありません。


Passwd

復号化する際のパスワードを入力します。


Mode

現在は使用しません。


戻り値:
FS_ER_USEBADKEY 501
 Passwdで指定したパスワードでは、Sourceの暗号文は復号化できませんでした。正確なパスワードを入力してください。


FS_ER_CR_BADHEADER 502

 Sourceで指定した暗号文のヘッダまたは暗号文ではありません。


FS_ER_CR_OVERSIZE 503

 Sourceで指定した暗号文のサイズが限界を超えました。暗号文を14336バイト以下にしてください。


解説:
     公開鍵暗号を用いた暗号文の復号化は以下の手順で行ってください。
     
    1. 暗号文をGetDecryptKey関数で鍵データから復号化鍵を取得します。
    2. TextDecrypt関数のPasswdに復号化鍵を指定して暗号文を復号化します。


     1.で誤った秘密鍵を設定しても、処理は継続されて復号化鍵を取得します。
     しかし、その復号化鍵が正確であるか否かは、2.の処理で分かります。
     もし、1.で誤った秘密鍵を指定すると、暗号化鍵と異なった復号化鍵が取得されてしまい、結果として、TextDecrypt関数で、暗号文を復号化する事ができません。




8.6 デジタル署名
MakeDigitalSignature

 テキストデータのデジタル署名を作成します。

 



VisualC++
long MakeDigitalSignatureC(char*          SignedWord,   //処理結果
                           const char*        Source,   //署名対象

                           const char* YourPublickey,   //公開鍵
                           const char* YourSecretkey,   //秘密鍵
                           long               Length,   //テキストの長さ
                           long                 Mode ); //未使用



VisualBasic
Declare Function MakeDigitalSignatureB Lib "FSCRYP32.DLL" (ByVal SignedSource As String, ByVal Source as String, ByVal YourPublickey as String, ByVal YourSecretkey as String, ByVal Length As Long, ByVal Mode As Long) As Long
 

解説:
SignedWord
デジタル署名された結果が保存されます。
Lengthで指定した分のバッファの数だけ確保して下さい.


Source

デジタル署名をしたいテキストを指定します。


YourPublickey

署名者の公開鍵を指定します。


YourSecretkey

署名者の公開鍵を作成した秘密鍵を指定します。


Length

デジタル署名をしたいテキストの長さをバイトで指定します。
最大で64KB(65536バイト)以下で指定する必要があります。


Mode

現在は使用しません。


戻り値:
FS_ER_PUB_BADCKHEAD 703
 Sourceで指定した鍵データのヘッダが不正、または、鍵データが含まれていません。
 
FS_ER_PUB_BADVALUES 704
 公開鍵の内部に不正な数値が使われています。可能性として、YourKeyで指定した公開鍵が破損している可能性があります。
 
FS_ER_PUB_BADSECRET 706
 秘密鍵と公開鍵の関係が一致していません。可能性として秘密鍵か公開鍵が間違っています。


解説:
     デジタル署名は署名者の公開鍵と秘密鍵を用いて行います。
     デジタル署名の正当性は、署名者の公開鍵によって検証されます。
     



8.7 デジタル署名の検証

CheckDigitalSignature

 デジタル署名の検証を行います。

 



VisualC++
long CheckDigitalSignatureC(const char*        Source,   //デジタル署名が施されたテキスト
                            const char*  HerPublickey,   //署名者の公開鍵

                            long                 Mode ); //未使用



VisualBasic
Declare Function CheckDigitalSignatureB Lib "FSCRYP32.DLL" (ByVal Source As String, ByVal HerPublickey as String, ByVal Mode As Long) As Long
 

解説:
Source
デジタル署名が施されたテキストを指定します。


HerPublickey

署名者の公開鍵を指定します。


Mode

現在は使用しません。


戻り値:
FS_ER_PUB_BADSINHEAD   707
 デジタル署名の文章でない可能性があります。
 
FS_ER_PUB_BADSIGNATURE 708
 デジタル署名の検証に失敗しました。
 可能性としてデジタル署名時と文章が異なる可能性があります。
 


解説:
     デジタル署名の検証は、署名者の公開鍵を用いて行います。
     署名時と同じ公開鍵を用いないと、検証に失敗します。
     



8.8 戻り値一覧

 各関数の戻り値の意味は以下の通りです。
 もし、リファレンスに載っていないエラーが出た場合は、ここから原因を調べてみてください。

(fsdefines.hに記載されているものを転載)

//テキスト暗号化・復号化関係
#define FS_ER_USEBADKEY         501   //パスワード認証失敗
#define FS_ER_CR_BADHEADER      502   //共通鍵暗号ヘッダが不正
#define FS_ER_CR_OVERSIZE       503   //対象データが容量オーバー

//テキスト圧縮・解凍関連
#define FS_ER_TXTC_OVERSIZE     601   //処理するデータ容量が限界

//公開鍵処理関連
#define FS_ER_PUB_BADGEN        701 //不正な数値が使用されている可能性アリ(原始元)
#define FS_ER_PUB_BADPKHEAD     702 //公開鍵が不正なヘッダ
#define FS_ER_PUB_BADCKHEAD     703 //暗号化鍵データヘッダが不正
#define FS_ER_PUB_BADVALUES     704 //不正な数値が使用されている可能性アリ(分離時)
#define FS_ER_PUB_NOSETSTR      705 //秘密鍵に何も設定されていない
#define FS_ER_PUB_BADSECRET     706 //秘密鍵が不正(デジタル署名時)
#define FS_ER_PUB_BADSINHEAD    707 //デジタル署名のヘッダが不正
#define FS_ER_PUB_BADSIGNATURE  708 //デジタル署名の検証が失敗
#define FS_ER_PUB_BADPRIME      709 //不正な数値が使用されている可能性アリ(素数)
#define FS_ER_PUB_BADSIGNVALUE  710 //デジタル署名データが不正

 


9.サポート

 FSCRYP32.DLLをご利用の上でご不明な点などがございましたら、お気軽にFreedomSoftまでお問い合わせください。
 最新のFSCRYP32.DLLの情報は、FreedomSoftのウェブページをご覧ください。

 また、企業・団体のユーザーの方で、使用条件の(3)開発時の注意に同意していただけない場合は、ライセンスを取得していただく必要がございます。
 この場合のお問い合わせもお気軽にどうぞ。

・メールはこちらから
info {A T M A R K} freedomsoft {D O T} net

・お問い合わせフォームもご利用ください
お問い合わせフォーム

・ウェブサイト
http://www.freedomsoft.net/


10.謝辞
 

 このFSCRYP32.DLLの開発には、高橋一男さんが作られた多倍長整数ライブラリTKIntegerを採用しています。また、処理アルゴリズムには、奈良教育大学の浅井さんの作られたソースコードを参考にいたしました。
 ありがとうございました。

 また、プログラム作成にあたって以下の方のご協力をいただきました。
 ありがとうございました。

・Ryouhei
・High_Busy Claft Kazutomo Yonehara
・Karlis Blumentals (Latvia)