ENCRYPT função escalar
A função ENCRYPT retorna um valor que é o resultado da criptografia data-string-expression.
O esquema é SYSIBM.
A senha usada para a criptografia é o valor de password-string-expression ou o valor da senha de criptografia que foi designado pela instrução SET ENCRYPTION PASSWORD. Para manter o melhor nível de segurança em seu sistema, é recomendado que você não passe a senha de criptografia explicitamente com a função ENCRYPT em sua consulta; em vez disso, use a instrução SET ENCRYPTION PASSWORD para configurar a senha e use uma variável de host ou marcadores de parâmetro dinâmicos ao usar a instrução SET ENCRYPTION PASSWORD, em vez de uma sequência literal.
Em um banco de dados Unicode, se um argumento fornecido for uma sequência gráfica, ele será primeiro convertido em uma sequência de caracteres antes que a função seja executada.
- expressão de cadeia de dados
- Uma expressão que retorna um valor CHAR ou VARCHAR que deve ser criptografado. O atributo de comprimento para o tipo de dados data-string-expression é limitado a 32663 sem um argumento hint-string-expression e 32631 quando o argumento hint-string-expression é especificado (SQLSTATE 42815). expressão de sequência de senha
- Uma expressão que retorna um valor CHAR ou VARCHAR com pelo menos 6 bytes e no máximo 127 bytes (SQL STATE 428FC). O valor representa a senha usada para criptografar data-string-expression. Se o valor do argumento de senha for nulo ou não fornecido, os dados serão criptografados usando o valor da senha de criptografia designado para a sessão pela instrução SET ENCRYPTION PASSWORD (SQLSTATE 51039). expressão-de-cadeia-de-dicas
- Uma expressão que retorna um valor CHAR ou VARCHAR com no máximo 32 bytes que ajudará os proprietários de dados a lembrar senhas (por exemplo, 'Ocean' como uma dica para lembrar 'Pacific'). Se um valor de sugestão for fornecido, a sugestão será integrada no resultado e poderá ser recuperada usando a função GETHINT. Se esse argumento for nulo ou não fornecido, nenhuma sugestão será integrada no resultado.
- Quando o parâmetro de sugestão opcional é especificado, o atributo de comprimento do resultado é igual ao atributo de comprimento dos dados não criptografados + 8 bytes + o número de bytes até o próximo limite de 8 bytes + 32 bytes para o comprimento da dica..
- Quando o parâmetro de sugestão opcional não for especificado, o atributo de comprimento do resultado será igual ao atributo de comprimento dos dados não criptografados + 8 bytes + o número de bytes até o próximo limite de 8 bytes...
Se o primeiro argumento for nulo, o resultado poderá ser nulo. Se o primeiro argumento for nulo, o resultado será o valor nulo
Observe que o resultado criptografado é maior que o valor data-string-expression . Portanto, ao designar valores criptografados, assegure que o destino seja declarado com tamanho suficiente para conter o valor criptografado inteiro.
Notas
- Algoritmo de criptografia: O algoritmo de criptografia interno é a cifra de bloco RC2 com preenchimento; a chave secreta de 128 bits é derivada da senha usando uma compilação de mensagens MD5 .
- Senhas e dados de criptografia: Gerenciamento de senha é responsabilidade do usuário. Depois que os dados forem criptografados, apenas a senha que foi usada ao criptografar poderá ser usada para decriptografá-los (SQLSTATE 428FD).
O resultado criptografado pode conter terminador nulo e outros caracteres não imprimíveis. Qualquer designação ou conversão para um comprimento menor que o comprimento de dados sugerido pode resultar em decriptografia com falha no futuro e dados perdidos. Os espaços em branco são valores de dados criptografados válidos que podem ser truncados quando armazenados em uma coluna muito curta.
- Administração de dados criptografados: Dados criptografados podem ser decriptografados apenas em servidores que suportam as funções de decriptografia correspondentes à função ENCRYPT. Portanto, a replicação de colunas com dados criptografados deve ser feita apenas para servidores que suportem a função DECRYPT_BIN ou DECRYPT_CHAR
- Evitar dados criptografados em predicados: A função ENCRYPT nem sempre produz os mesmos dados criptografados quando a mesma entrada é fornecida. Não use dados criptografados em condições de procura nem em operações de comparação Por exemplo, não use dados criptografados em um predicado..
Exemplos
- Exemplo 1: O exemplo a seguir demonstra o uso da função ENCRYPT mostrando fragmentos de códigos de um aplicativo SQL integrado.
EXEC SQL BEGIN DECLARE SECTION; char hostVarCreateTableStmt[100]; char hostVarSetEncPassStmt[200]; char hostVarPassword[128]; char hostVarInsertStmt1[200]; char hostVarInsertStmt2[200]; char hostVarInsertStmt3[200]; EXEC SQL END DECLARE SECTION; /* prepare the statement */ strcpy(hostVarCreateTableStmt, "CREATE TABLE EMP (SSN VARCHAR(24) FOR BIT DATA)"); EXEC SQL PREPARE hostVarCreateTableStmt FROM :hostVarCreateTableStmt; /* execute the statement */ EXEC SQL EXECUTE hostVarCreateTableStmt; - Exemplo 2: Use a instrução SET ENCRYPTION PASSWORD para configurar uma senha de criptografia para a sessão:
/* prepare the statement with a parameter marker */ strcpy(hostVarSetEncPassStmt, "SET ENCRYPTION PASSWORD = ?"); EXEC SQL PREPARE hostVarSetEncPassStmt FROM :hostVarSetEncPassStmt; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarSetEncPassStmt USING :hostVarPassword; /* prepare the statement */ strcpy(hostVarInsertStmt1, "INSERT INTO EMP(SSN) VALUES ENCRYPT('289-46-8832')"); EXEC SQL PREPARE hostVarInsertStmt1 FROM :hostVarInsertStmt1; /* execute the statement */ EXEC SQL EXECUTE hostVarInsertStmt1; - Exemplo 3: passe a senha de criptografia explicitamente:
/* prepare the statement */ strcpy(hostVarInsertStmt2, "INSERT INTO EMP(SSN) VALUES ENCRYPT('289-46-8832',?)"); EXEC SQL PREPARE hostVarInsertStmt2 FROM :hostVarInsertStmt2; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarInsertStmt2 USING :hostVarPassword; - Exemplo 4: defina uma sugestão de senha:
/* prepare the statement */ strcpy(hostVarInsertStmt3, "INSERT INTO EMP(SSN) VALUES ENCRYPT('289-46-8832',?,'Ocean')"); EXEC SQL PREPARE hostVarInsertStmt3 FROM :hostVarInsertStmt3; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarInsertStmt3 USING :hostVarPassword;
