4D v16.3

Generate digest

Inicio

 
4D v16.3
Generate digest

Generate digest 


 

Generate digest ( param ; algoritmo ) -> Resultado 
Parámetro Tipo   Descripción
param  BLOB, Variable texto in Blob o texto para el cual obtener un extracto
algoritmo  Entero largo in Algoritmo utilizado para devolver la llave:
0 = Digest MD5, 1 = Digest SHA1
Resultado  Texto in Valor del extracto

El comando Generate digest devuelve el extracto de un BLOB o de un texto después de la aplicación de un algoritmo de encripción.

En 4D, están disponibles los siguientes algoritmos: MD5 (Message Digest 5), SHA-1 (Secure Hash 1) y 4D (algoritmo interno). Estos algoritmos son funciones de hash diferentes:

  • MD5 es una secuencia de 16 bytes devuelta como una cadena de 32 caracteres hexadecimales.
  • SHA-1 es una secuencia de 20 bytes devuelta por una cadena de 40 caracteres hexadecimales.
  • 4D designa el algoritmo interno utilizado por 4D para encriptar las contraseñas de usuarios. Este algoritmo es útil particularmente en el contexto del Método base On 4D Mobile Authentication cuando desea utilizar su propia lista de usuarios.

El valor devuelto por el mismo objeto es el mismo en todas las plataformas (Mac/Windows, 32 o 64 bits). El cálculo se efectúa a partir de la representación en UTF-8 del texto pasado en parámetro.

Nota: si utiliza el comando con un texto/BLOB vacío, no devolverá  void sino el siguiente valor: "d41d8cd98f00b204e9800998ecf8427e" (MD5) o "da39a3ee5e6b4b0d3255bfef95601890afd80709" (SHA-1).

Pase un campo o una variable Texto o BLOB en el parámetro param. La función Generate digest devuelve el extracto como una cadena.

En el parámetro algoritmo, pase un valor designando la función hash a utilizar. Utilice una de las siguientes constantes, ubicadas en el tema :

Constante Tipo Valor Comentario
4D digest Entero largo 2 Utilizar el algoritmo interno de 4D
MD5 digest Entero largo 0 Utilizar el algoritmo MD5
SHA1 digest Entero largo 1 Utilizar el algoritmo SHA-1

Si el calculo del extracto no se ejecuta correctamente, la función genera un error que puede interceptar utilizando el comando ON ERR CALL y la función devuelta en una cadena vacía.

Este ejemplo compara dos documentos utilizando el algoritmo MD5:

 PLATFORM PROPERTIES($Platf;$Syst;$vlMachine)
  // Abrir el primer documento en modo sólo lectura
 $Same:=True
 $vhDocRef1:=Open document("";"*";Read Mode))
 If(OK=1) // Si un documento ha sido seleccionado
    DOCUMENT TO BLOB(Document;$FirstBlob// Cargar el documento
    If(OK=1)
       If($Platf=Mac OS)
          DOCUMENT TO BLOB(Document;$FirstBlobRF;*)
  // Bajo Mac OS, cargar el resource fork
          $MD5_1RF:=Generate digest($FirstBlobRF;MD5 digest)
       End if
 
  // Abrir el segundo documento como sólo lectura
       $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// Comparar los 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("Estos dos documentos son diferentes.")
             End if
          End if
       End if
    End if
 End if

Estos ejemplos ilustran cómo recuperar el extracto de un texto:

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

Este ejemplo sólo acepta el usuario "admin" con la contraseña "123" que no corresponde a un usuario 4D:

  //On REST Authentication database method
 C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
  //$1: usuario
  //$2: contraseña
  //$3: modo digest
 If($1="admin")
    If($3)
       $0:=($2=Generate digest("123";4D digest))
    Else
       $0:=($2="123")
    End if
 Else
    $0:=False
 End if

 
PROPIEDADES 

Producto: 4D
Tema: Herramientas
Número 1147

This command can be run in preemptive processes

 
HISTORIA 

Creado por: 4D v13
Modificado: 4D v14

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)