4D v16.3Generate digest |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Generate digest
|
Generate digest ( param ; algorithme ) -> Résultat | ||||||||
Paramètre | Type | Description | ||||||
param | BLOB, Variable texte |
![]() |
Blob ou texte pour lequel obtenir une clé digest | |||||
algorithme | Entier long |
![]() |
Algorithme utilisé pour retourner la clé : 0 = Digest MD5, 1 = Digest SHA1, 2 = Digest 4D |
|||||
Résultat | Texte |
![]() |
Valeur de la clé digest | |||||
La commande Generate digest retourne la clé digest d’un BLOB ou d’un texte après application d’un algorithme de cryptage.
Dans 4D, les algorithmes suivants sont disponibles : MD5 (Message Digest 5) et SHA-1 (Secure Hash 1) ainsi que 4D (algorithme interne). Ces algorithmes sont des fonctions de hachage différentes :
La valeur retournée pour un même objet sera identique sur toutes les plates-formes (Mac/Windows, 32 ou 64 bits). Le calcul est effectué à partir de la représentation en UTF8 du texte passé en paramètre.
Note : Si vous utilisez la commande avec un texte/BLOB vide, elle ne retournera pas void mais la valeur suivante : "d41d8cd98f00b204e9800998ecf8427e" (MD5) ou "da39a3ee5e6b4b0d3255bfef95601890afd80709" (SHA-1).
Passez un champ ou une variable Texte ou BLOB dans le paramètre param. La clé digest est retournée sous forme de chaîne par la fonction Generate digest.
Passez dans le paramètre algorithme une valeur désignant la fonction de hachage à employer. Vous pouvez utiliser l’une des constantes suivantes, placées dans le thème :
Constante | Type | Valeur | Comment |
4D digest | Entier long | 2 | Algorithme interne utilisé par 4D pour crypter les mots de passe des utilisateurs. L'utilisation de cet algorithme est particulièrement utile dans le cadre de la On 4D Mobile Authentication database method lorsque vous souhaitez exploiter votre propre liste d'utilisateurs. |
MD5 digest | Entier long | 0 | Algorithme Message Digest 5. Séquence de 128 bits retournée en tant que chaîne de 32 caractères hexadécimaux. |
SHA1 digest | Entier long | 1 | Algorithme Secure Hash 1. Séquence de 160 bits retournée en tant que chaîne de 40 caractères hexadécimaux. |
Si le calcul de la clé digest ne s’exécute pas correctement, la fonction génère une erreur que vous pouvez intercepter à l’aide de la commande ON ERR CALL, et la fonction retourne une chaîne vide.
Cet exemple vous permet de comparer deux documents à l’aide de l’algorithme MD5 :
PLATFORM PROPERTIES($Platf;$Syst;$vlMachine)
// Ouvrir le premier document en lecture seule
$Same:=True
$vhDocRef1:=Open document("";"*";Read Mode))
If(OK=1) // Si un document a été sélectionné
DOCUMENT TO BLOB(Document;$FirstBlob) // Charger le document
If(OK=1)
If($Platf=Mac OS)
DOCUMENT TO BLOB(Document;$FirstBlobRF;*)
// Sous Mac OS, charger la resource fork
$MD5_1RF:=Generate digest($FirstBlobRF;MD5 digest)
End if
// Ouvrir le second document en lecture seule
$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) // Comparer les digests
$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("Ces deux documents sont différents.")
End if
End if
End if
End if
End if
Ces exemples illustrent comment récupérer la clé digest d’un texte :
$key1:=Generate digest("The quick brown fox jumps over the lazy dog.";MD5 digest)
// $key1 vaut "e4d909c290d0fb1ca068ffaddf22cbd0"
$key2:=Generate digest("The quick brown fox jumps over the lazy dog.";SHA1 digest)
// $key2 vaut "408d94384216f890ff7a0c3528e8bed1e0b01621"
Cet exemple n’accepte que l’utilisateur "admin" avec le mot de passe "123" ne correspondant pas à un utilisateur 4D :
//Méthode base sur authentification REST
C_TEXT($1;$2)
C_BOOLEAN($0;$3)
//$1 : utilisateur
//$2 : mot de passe
//$3 : mode digest
If($1="admin")
If($3)
$0:=($2=Generate digest("123";4D digest))
Else
$0:=($2="123")
End if
Else
$0:=False
End if
Produit : 4D
Thème : Outils
Numéro :
1147
Créé : 4D v13
Modifié : 4D v14
4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)