4D v14.3ENCRYPT BLOB |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
ENCRYPT BLOB
|
ENCRYPT BLOB ( toEncrypt ; sendPrivKey {; recipPubKey} ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
toEncrypt | BLOB |
![]() |
Dados a encriptar | |||||
![]() |
Dados encriptados | |||||||
sendPrivKey | BLOB |
![]() |
Chave privada do emissor | |||||
recipPubKey | BLOB |
![]() |
Chave pública do receptor | |||||
O comando ENCRYPT BLOB criptograma o conteúdo do BLOB toEncrypt com a chave privada do remetente sendPrivKey, bem como, opcionalmente, a chave pública do destinatário recipPubKey. Estas chaves devem ser geradas pelo comando GENERATE ENCRYPTION KEYPAIR (no âmbito do tema "Protocolo Seguro").
Nota: Este comando usa o algoritmo do protocolo SSL e recursos de criptografia. Para poder usar este comando, certifique-se que os componentes necessários para o protocolo SSL estão corretamente instalados em sua máquina - mesmo que você não queira usar SSL para conexões de servidor Web de 4D. Para obter informações detalhadas sobre esse protocolo, consulte a seção de Usar protocolo SSL, usando protocolo SSL.
O BLOB contendo as chaves tem um formato PKCS interno. Este formato de plataforma padrão permite a troca ou o tratamento de chaves simplesmente copiando-colando em um e-mail ou um arquivo de texto.
Uma vez que o comando foi executado, o BLOB toEncrypt contém os dados criptografados, que serão descriptografados apenas com o comando DECRYPT BLOB, com a chave pública do remetente passada como parâmetro.
Além disso, se chave pública do destinatário opcional foi usada para criptografar as informações, a chave privada do destinatário também será necessária para descriptografar.
O princípio da criptografia com chaves públicas e privadas para a troca de mensagens entre duas pessoas, "Alice" e "Bob":
Nota: A cifra inclui uma funcionalidade de verificação a fim de evitar qualquer alteração de conteúdo BLOB (deliberadamente ou não). Por conseguinte, um BLOB criptografado não deve ser modificado, de outra forma não poderia ser decifrado.
A criptografia de dados atrasa a execução de suas aplicações, especialmente se um par de chaves é usado. No entanto, você pode considerar as seguintes dicas de otimização:
Caso contrário, por razões de segurança, o modo síncrono é utilizado. Este modo é mais lento, uma vez que congela a outros processos.
A empresa deseja manter os dados armazenados em um banco de dados 4D privado. Tem que enviar regularmente essas informações às suas filiais através de arquivos, via Internet.
1) A empresa gera um par de chaves com o comando GENERATE ENCRYPTION KEYPAIR:
`Método GENERAR_LLAVES_TXT
C_BLOB($BChavePublica;$BChavePrivada)
GENERATE ENCRYPTION KEYPAIR($BChavePrivada;$BChavePublica)
BLOB TO DOCUMENT("ChavePublica.txt";$BChavePublica)
BLOB TO DOCUMENT("ChavePrivada.txt";$BChavePrivada)
2) A empresa mantém a chave privada e envia uma cópia do documento que contém a chave pública para cada filial. Para segurança máxima, a chave deve ser copiada em um disco e entregue as filiais.
3) Em seguida, a empresa copia as informações privadas (armazenada no campo de texto, por exemplo) nos BLOBs que serão criptografados com a chave privada:
`Método CIFRAR_INFO
C_BLOB($vbCifrado;$vbChavePrivada)
C_TEXT($vtCifrado)
$vtCifrado:=[Privado]Info
VARIABLE TO BLOB($vtCifrado;$vbCifrado)
DOCUMENT TO BLOB("ChavePrivada.txt";$vbChavePrivada)
If(OK=1)
ENCRYPT BLOB($vbCifrado;$vbChavePrivada)
BLOB TO DOCUMENT("Update.txt";$vbCifrado)
End if
4) Os arquivos de atualização podem ser enviados para as filiais (apesar de um canal não-seguro, como a Internet). Se uma terceira pessoa agarra o arquivo criptografado, ela não será capaz de decifrá-lo sem a chave pública.
5) Cada filial pode decifrar o documento com a chave pública:
`Método DESCIFRAR_INFO
C_BLOB($vbCifrado;$vbChavePublica)
C_TEXT($vtDescifrado)
C_TIME($vtDocRef)
ALERT("Por favor selecione um documento cifrado.")
$vtDocRef:=Open document("") `Selecione Update.txt
If(OK=1)
CLOSE DOCUMENT($vtDocRef)
DOCUMENT TO BLOB(Document;$vbCifrado)
`Sua chave privada é carregada
DOCUMENT TO BLOB("ChavePublica.txt";$vbChavePublica)
If(OK=1)
DECRYPT BLOB($vbCifrado;$vbChavePublica)
BLOB TO VARIABLE($vbCifrado;$vtDescifrado)
CREATE RECORD([Privado])
[Privado]Info:=$vtDescifrado
SAVE RECORD([Privado])
End if
End if
1) O escritório corporativo e cada filial geram os seus próprios pares de chaves (com o método GENERATE_KEYS_TXT).
2) A chave privada é mantida em segredo pelos dois lados. Cada filial envia sua chave pública para a sede da empresa que, por sua vez, envia sua chave pública também. Esta transferência de chave não precisa ser feito através de um canal seguro já que a chave pública não é suficiente para decifrar a mensagem.
3) Para criptografar os dados para enviar, a filial ou a casa corporativa executa o método ENCRYPT_INFO_2 que usa a chave privada do remetente e a chave pública do destinatário para criptografar as informações:
`Método <span class="rte4d_cmd">CIFRAR_INFO_2</span><gen9>
C_BLOB($vbCifrado;$vbChavePrivada;$vbChavePublica)
C_TEXT($vtCifrado)
C_TIME($vtDocRef)
$vtEncrypt:=[Privado]Info
VARIABLE TO BLOB($vtCifrado;$vbCifrado)
` Sua própria chave privada é carregado...
DOCUMENT TO BLOB("ChavePrivada.txt";$vbChavePrivada)
If(OK=1)
` ...e a chave pública do destinatário
ALERT("Por favor selecione a chave pública do destinatário.")
$vhDocRef:=Open document("") `Chave pública a ser carregada
If(OK=1)
CLOSE DOCUMENT($vtDocRef)
DOCUMENT TO BLOB(Document;$vbChavePublica)
`Cifrado do BLOB com duas chaves como parâmetros
ENCRYPT BLOB($vbCifrado;$vbChavePrivada;$vbChavePublica)
BLOB TO DOCUMENT("Update.txt";$vbCifrado)
End if
End if</gen9>
4) O arquivo criptografado pode ser enviado para o destinatário através da Internet . Se uma terceira pessoa se apodera dele, ele ou ela não será capaz de decifrar a mensagem, mesmo se ele ou ela tem as chaves públicas já que a chave privada do destinatário também será necessária.
5) Cada destinatário pode descriptografar o documento usando suas próprias chaves privadas e o a chave pública do remetente:
`Método <span class="rte4d_cmd">CIFRAR_INFO_2</span><gen9>
C_BLOB($vbCifrado;$vbChavePrivada;$vbChavePublica)
C_TEXT($vtCifrado)
C_TIME($vtDocRef)
ALERT("Por favor selecione la chave pública do destinatario.")
$vhDocRef:=Open document("") `Chave pública a ser carregada
If(OK=1)
CLOSE DOCUMENT($vhDocRef)
DOCUMENT TO BLOB(Document;$vbCifrado)
`Se carrega sua própria chave privada
DOCUMENT TO BLOB("ChavePrivada.txt";$vbChavePrivada)
If(OK=1)
` ...e a chave pública do emissor
ALERT("Por favor selecione a chave pública do emissor.")
$vhDocRef:=Open document("") `Chave pública a carregar
If(OK=1)
CLOSE DOCUMENT($vhDocRef)
DOCUMENT TO BLOB(Document;$vbChavePublica)
`Descifrar o BLOB com duas chaves como parâmetros
DECRYPT BLOB($vbCifrado;$vbChavePublica;$vbChavePrivada)
BLOB TO VARIABLE($vbCifrado;$vtDescifrado)
CREATE RECORD([Privado])
[Privado]Info:=$vtDescifrado
SAVE RECORD([Privado])
End if
End if
End if</gen9>
Produto: 4D
Tema: BLOB
Número
689
Criado por: 4D v6.7
DECRYPT BLOB
GENERATE ENCRYPTION KEYPAIR
Encryption, Public Key, Private key, PKCS, Optimization
Manual de linguagem 4D ( 4D v11 SQL Release 6)
Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)
Manual de linguagem 4D ( 4D v14 R4)