4D v16.3

Generate digest

ホーム

 
4D v16.3
Generate digest

Generate digest 


 

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

説明   

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

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

  • MD5では16 byteの値が計算され、16進形式で32文字が返されます。
  • SHA-1では20 byteの値が計算され、16進形式で40文字が返されます。
  • 4D では4D内部でユーザーパスワードを暗号化するために使用される内部アルゴリズムを使用します。このアルゴリズムは On 4D Mobile Authentication database method のコンテキストで独自のユーザーリストを使用したいときに特に有効です。
同じオブジェクトに対してはすべてのプラットフォーム (Mac/Windows, 32/64 bits) で同じ値が返されます。 計算は引数に渡されたテキストのUTF-8での表記に基づいて実行されます。

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

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

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

定数 コメント
4D digest 倍長整数 2 4D内部のアルゴリズムを使用。4Dがユーザーパスワードを暗号化するために使用しています。このアルゴリズムはOn 4D Mobile Authentication database method のコンテキストにおいて独自のユーザー一覧を使用したい場合には特に有用です。
MD5 digest 倍長整数 0 MD5アルゴリズムを使用。32ビットの16進数の文字列として返された、連続した128ビット
SHA1 digest 倍長整数 1 SHA-1アルゴリズムを使用。40ビットの16進数の文字列として返された、連続した160ビット

ダイジェストキーの計算が失敗した場合コマンドはエラーを生成し、空の文字列を返します。このエラーは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"

この例題ではパスワード "123"を使用する、4Dユーザーと合致しない "admin"というユーザーのみを受け入れる場合を考えます:

  //On REST Authentication database method
 C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
  //$1: ユーザー
  //$2: パスワード
  //$3: ダイジェストモード
 If($1="admin")
    If($3)
       $0:=($2=Generate digest("123";4D digest))
    Else
       $0:=($2="123")
    End if
 Else
    $0:=False
 End if

 
プロパティ 

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

This command can be run in preemptive processes

 
履歴 

初出: 4D v13
変更: 4D v14

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)