4D v13.4

Generate digest

ホーム

 
4D v13.4
Generate digest

Generate digest 


 

Generate digest ( param ; algorithm ) -> 戻り値 
引数   説明
param  BLOB, テキスト変数 in Digestキーを取得するBLOBやテキスト
algorithm  倍長整数 in キーの生成に使用するアルゴリズム
0= MD5、1 = SHA1
戻り値  テキスト in Digestキーの値

説明   

Generate digestコマンドはBLOBやテキストのDigestキーを指定したアルゴリズムで生成して返します。

現在4Dでは2つのアルゴリズム、MD5 (Message Digest 5) と SHA-1 (Secure Hash 1) が利用できます。これらのアルゴリズムは異なるハッシュ関数です:

  • MD5では16 byteの値が計算され、16進形式で32文字が返されます。
  • SHA-1では20 byteの値が計算され、16進形式で40文字が返されます。

同じオブジェクトに対してはすべてのプラットフォーム (Mac/Windows, 32/64 bits) で同じ値が返されます。データベースの実行モード (Unicodeあるいは非Unicode) に関わらず、計算は引数として渡されたテキストのUTF-8表現に対して実行されます。

注: コマンドを空のテキストやBLOBに対して実行すると、計算結果として以下が返されます (エラーにはなりません): "d41d8cd98f00b204e9800998ecf8427e" (MD5)
"da39a3ee5e6b4b0d3255bfef95601890afd80709" (SHA-1)

param 引数にはテキストまたはBLOBフィールドや変数を渡します。Generate digestコマンドはダイジェストキーを文字列として返します。

algorithm 引数で使用するハッシュ関数を指定します。Digest Typeテーマの以下の定数を使用できます:

定数 コメント
MD5 Digest 倍長整数 0 MD5アルゴリズムを使用
SHA1 Digest 倍長整数 1 SHA-1アルゴリズムを使用

ダイジェストキーの計算が失敗した場合コマンドはエラーを生成し、空の文字列を返します。このエラーはON ERR CALLでインストールされるエラー処理メソッドで処理できます。

この例題ではMD5アルゴリズムを使用して2つのドキュメントを比較します:

 PLATFORM PROPERTIES($Platf;$Syst;$vlMachine)
  // 一番目のドキュメントを読み込みモードで開く
 $Same:=True
 $vhDocRef1:=Open document("";"*";Read Mode))
 If(OK=1) // ドキュメントが選択されたら
    DOCUMENT TO BLOB(Document;$FirstBlob// ドキュメントをロード
    If(OK=1)
       If($Platf=Mac OS)
          DOCUMENT TO BLOB(Document;$FirstBlobRF;*)
  // Mac OSではリソースフォークもロード
          $MD5_1RF:=Generate digest($FirstBlobRF;MD5 Digest)
       End if
 
  // 二番目のドキュメントを読み込みモードで開く
       $vhDocRef2:=Open document("";"*";Read Mode))
       If(OK=1)
          DOCUMENT TO BLOB(Document;$SecondBlob)
          If(OK=1)
             If($Platf=Mac OS)
                DOCUMENT TO BLOB(Document;$SecondBlobRF;*)
                $MD5_2RF:=Generate digest($SecondBlobRF;MD5 Digest)
                If($MD5_1RF#$MD5_2RF// ダイジェストを比較
                   $Same:=False
                End if
             End if
             $MD5_1:=Generate digest($FirstBlob;MD5 Digest)
             $MD5_2:=Generate digest($SecondBlob;MD5 Digest)
             If(($MD5_1#$MD5_2)|($Same=False))
                ALERT("異なるドキュメントです")
             End if
          End if
       End if
    End if
 End if

この例題ではテキストのダイジェストキーを取得します:

 $key1:=Generate digest("The quick brown fox jumps over the lazy dog.";MD5 Digest)
  // $key1は"e4d909c290d0fb1ca068ffaddf22cbd0"
 $key2:=Generate digest("The quick brown fox jumps over the lazy dog.";SHA1 Digest)
  // $key2は"408d94384216f890ff7a0c3528e8bed1e0b01621"

 
プロパティ 

プロダクト: 4D
テーマ: ツール
番号: 1147

 
目次

コマンドリスト (文字順)

 
履歴 

New
初出: 4D v13