4D v16.3

Generate digest

Página Inicial

 
4D v16.3
Generate digest

Generate digest 


 

Generate digest ( param ; algoritmo ) -> resultado 
Parâmetro Tipo   Descrição
param  BLOB, Variável texto in Blob o texto para o qual obter uma chave digest
algoritmo  Inteiro longo in Algoritimo utilizado para retornar a chave:
0 = MD5 Digest, 1 = SHA1 Digest
resultado  Texto in Valor da chave digest

O comando Generate digest devolve a extrato de um BLOB ou de um texto depois da aplicação de um algoritmo de criptografia.

Em 4D, estão disponíveis dois algoritmos: MD5 (Message Digest 5) e SHA-1 (Secure Hash 1) e 4D (algoritmo interno). Estes algoritmos são funções de hash diferentes:

  • MD5 é uma sequência de 16 bytes devolvida como uma cadeia de 32 caracteres hexadecimais.
  • SHA-1 é uma sequência de 20 bytes devolvida por uma cadeia de 40 caracteres hexadecimais.
  • 4D designa o algoritmo interno utilizado por 4D para encriptar as senhas de usuários. Este algoritmo é útil particularmente no contexto do On 4D Mobile Authentication database method quando deseja utilizar sua própria lista de usuários.

O valor devolvido pelo mesmo objeto é o mesmo em todas as plataformas (Mac/Windows, 32 o 64 bits). O cálculo se realiza a partir da representação em UTF-8 do texto passado no parâmetro.

Nota: Se utiliza o comando com um texto/BLOB vazio, não devolverá  void se não o seguinte valor: "d41d8cd98f00b204e9800998ecf8427e" (MD5) ou "da39a3ee5e6b4b0d3255bfef95601890afd80709" (SHA-1).

Passe um campo ou uma variável Texto ou BLOB no parâmetro param. A função Generate digest devolve o extrato como uma cadeia.

No parâmetro algoritmo, passe um valor designando a função hash a utilizar. Utilize uma das seguintes constantes, localizadas no tema :

Constante Tipo Valor Comentário
4D digest Inteiro longo 2 Utilizar o algoritmo interno de 4D
MD5 digest Inteiro longo 0 Utilizar o algoritmo MD5
SHA1 digest Inteiro longo 1 Utilizar o algoritmo SHA-1

Caso o calculo do extrato não executa corretamente, a função gera um erro que pode interceptar utilizando o comando ON ERR CALL e a função de volta em uma cadeia vazia.

Este exemplo compara dois documentos utilizando o algoritmo MD5:

 PLATFORM PROPERTIES($Platf;$Syst;$vlMachine)
  // Abrir o primeiro documento em modo leitura
 $Same:=True
 $vhDocRef1:=Open document("";"*";Read Mode))
 If(OK=1) // Se um documento foi selecionado
    DOCUMENT TO BLOB(Document;$FirstBlob// Carregar o documento
    If(OK=1)
       If($Platf=Mac OS)
          DOCUMENT TO BLOB(Document;$FirstBlobRF;*)
  // Baixo Mac OS, carregar o resource fork
          $MD5_1RF:=Generate digest($FirstBlobRF;MD5 digest)
       End if
 
  // Abrir o segundo documento como leitura
       $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 os 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("Esses dois documentos são diferentes.")
             End if
          End if
       End if
    End if
 End if

Esses exemplos ilustram como recuperar a chave digest de um 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 exemplo só aceita o usuário "admin" com a senha "123" que não corresponde a um usuário 4D:

  //On REST Authentication database method
 C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
  //$1: usuário
  //$2: senha
  //$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

 
PROPRIEDADES 

Produto: 4D
Tema: Ferramentas
Número 1147

This command can be run in preemptive processes

 
HISTÓRIA 

Criado por: 4D v13
Modificado: 4D v14

 
ARTICLE USAGE

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