4D v16.3Generate digest |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Generate digest
|
Generate digest ( param ; algoritmo ) -> resultado | ||||||||
Parâmetro | Tipo | Descrição | ||||||
param | BLOB, Variável texto |
![]() |
Blob o texto para o qual obter uma chave digest | |||||
algoritmo | Inteiro longo |
![]() |
Algoritimo utilizado para retornar a chave: 0 = MD5 Digest, 1 = SHA1 Digest |
|||||
resultado | Texto |
![]() |
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:
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
Produto: 4D
Tema: Ferramentas
Número
1147
Criado por: 4D v13
Modificado: 4D v14
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)