






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
php criptografia
Tipologia: Notas de estudo
1 / 10
Esta página não é visível na pré-visualização
Não perca as partes importantes!







Categoria:PHP
Vamos falar nesse artigo sobre criptografia, abordaremos: base64_encode(), md5() e crypt, vamos a descrição de cada um: base64_encode(); Codifica com base64, para decodificar basta usar a função: base64_decode().
md5(); Retorna um hash em um número hexadecimal de 32 caracteres, não há função de decodificação.
crypt(); Retornará uma string criptografada usando o algoritmo de encriptação Unix Standard DES- based ou algoritmos alternativos disponíveis no sistema. Não há função de decodificação, desde que crypt() utiliza uma algorimo de um só caminho.
Vejamos agora exemplo de uso de cada um:
Retorna o nome do banco de dados atual: mysql> SELECT DATABASE(); -> 'test' Se nenhum banco de dados estiver selecionado, DATABASE() retorna NULL a partir do MySQL 4.1.1, e uma string vazia em versões anteriores.
MySQL versão 3.22.11, o valor da função não inclui o nome da máquina cliente.) Você pode extrair apenas a parte do nome do usuário, desconsiderando se o valor inclui a parte do nome de máquina, desta forma: mysql> SELECT SUBSTRING_INDEX(USER(),"@",1); -> 'davida'
Calcula a senha a partir de senha str em texto puro. Está é a função que é utilizada para criptografar a senha do MySQL para armazenamento na coluna Password da tabela de permissões user mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b' A criptografia de PASSWORD() não e reversível. PASSWORD() não realiza a criptografia da senha da mesa maneira que as senhas Unix são criptografadas. Veja ENCRYPT(). Note : A função PASSWORD() é usada pelo sistema de autentificação no servidor MySQL, você NÃO deve uitlizá-las em suas próprias aplicações. Para este propósito utilize MD5() ou SHA1(). Veja também RFC- para maiores informações sobre o tratamento de senha e autenticação segura em suas aplicações.
Como o AES é um algorítimo de nível de bloco, padding é usado para codificar strings de tamanho ímpares e então a string resultante pode ser calculada como 16*(trunc(tamanho_string/16)+1). Se AES_DECRYPT() detectar dados inválidos ou padding incorreto, ela retorna NULL. No entanto, é possível para o AES_DECRYPT() retornar um valor não- NULL (possivelmente lixo) se os dados de entrada ou a chave eram inválidos Você pode usar as funções AES para armazenar dados de forma criptografada modificando as suas consultas: INSERT INTO t VALUES (1,AES_ENCRYPT('text','password')); Você pode obter mais segurança não transferindo a chave em suas conexões a cada consulta, o que pode ser conseguido armazenando-o em varáveis do lado do servidor na hora das conexão. SELECT @password:='my password'; INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password)); AES_ENCRYPT() e AES_DECRYPT() foram adicionados na versão 4.0.2, e podem ser considerados a função de criptografia mais segura atualmente disponível no MySQL.
A primeira chave de des-key-file é utilizada.
Número da chave A chave dada (0-9) de des-key-file é utilizada. string A chave_string dada será utilizada para criptografar string_para_criptografar. O string retornada será uma string binária onde o primeiro caracter será CHAR(128 | número_chave). O 128 é adicionado para facilitar o reconhecimento da chave de criptografia. Se você usar uma chave string, numéro_chave será 127. Havendo erro, esta função retorna NULL. O tamanho da string para o resultado será novo_tamanho= tamanho_orig + (8-(tamanho_orig % 8))+. O des-key-file terá o seguinte formato: numero_chave chave_string_des numero_chave chave_string_des Cada numero_chave deve ser um núero na faixa de 0 a 9. As linhas do arquivo podem estar em qualquer ordem. chave_string_des é a string que será usada para criptografar a mensagem. Entre o número e a chave deve haver pelo menos um espaço. A primeira chave é a chave
padrão que será utilizada se não for especificada nenhuma chave como argumento para DES_ENCRYPT() Você pode dizer ao MySQL para ler novos valores de arquivos de chave com o comando FLUSH DES_KEY_FILE. Isto exige o privilégio Reload_priv. Um benefício de ter um conjunto de chaves padrões é que ele dá a aplicação um modo de verificar a existência de valores criptografados em colunas, sem dar ao usuário final o direito de descriptografar estes valores. mysql> SELECT endereco_clientes FROM tabela_clientes WHERE cartao_credito_criptografado = DES_ENCRYPT("numero_cartao_credito");
Compacta uma string mysql> SELECT LENGTH(COMPRESS(REPEAT("a",1000))); -> 21 1 row in set (0.00 sec)
mysql> SELECT LENGTH(COMPRESS("")); -> 0 1 row in set (0.00 sec)
mysql> SELECT LENGTH(COMPRESS("a")); -> 13 1 row in set (0.00 sec)
mysql> SELECT LENGTH(COMPRESS(REPEAT("a",16))); -> 15 1 row in set (0.00 sec)
razão para isto é tornar possível reproduzir facilmente a mesma intrução INSERT em algum outro servidor. Se expr é dado com um argumento para LAST_INSERT_ID() , então o valor do argumento é retornado pela função e é configurado como o próximo valor para ser retornado pela LAST_INSERT_ID(). Isto pode ser útil para simular sequências: Primeiro crie a tabela: mysql> CREATE TABLE sequencia (id INT NOT NULL); mysql> INSERT INTO sequencia VALUES (0); Então a tabela pode ser usada para gerar sequência de números como estes: mysql> UPDATE sequencia SET id=LAST_INSERT_ID(id+1); Você pode gerar sequências sem chamar LAST_INSERT_ID() , mas a utilidade de se usar a função deste modo é que o valor ID é mantido no servidor como o último valor gerado automaticamente (seguro para multi-usurário). Você pode recuperar a nova ID como você leria qualquer valor AUTO_INCREMENT normal no MySQL. Por exemplo, LAST_INSERT_ID() (sem um argmento) retornará a nova ID. A função mysql_insert_id() da API C também pode ser usada para obter o valor. Note que como mysql_insert_id() só é atualizado depois de instruções INSERT e UPDATE , você não pode utilizar a função da API C para recuperar o valor para LAST_INSERT_ID(expr) depois de executar outra instrução SQL como SELECT ou SET. See Secção 12.1.3.32, mysql_insert_id().
Formata o número X com um format como '#,###,###.##' , arredondado para D casas decimais, e retorna o resultado como uma string. Se D é 0 , o resultado não terá nehum ponto decimal ou parte fracionária: mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235' mysql> SELECT FORMAT(12332.1,4); -> '12,332.1000' mysql> SELECT FORMAT(12332.2,0); -> '12,332'
Retorna a identificação (ID da thread) desta conexão. Cada conexão tem seu próprio ID único:
mysql> SELECT CONNECTION_ID(); -> 23786
A função BENCHMARK() executa a expressão expr repetidamente cont vezes. Ela pode ser usada para medir a velocidade em que o MySQL
o LIMIT , mas sem executar a instrução novamente. Para obter esta contagem de linhas, inclua uma opção SQL_CALC_FOUND_ROWS na instrução SELECT , então chame FOUND_ROWS() loga depois: mysql> SELECT SQL_CALC_FOUND_ROWS * FROM nome_tabela WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS(); O segundo SELECT irá retornar um número indicando quantas linhas o primeiro SELECT teria retornado se ele fosse escrito sem a cláusula LIMIT. (Se o instrução SELECT anterior não inclui a opção SQL_CALC_FOUND_ROWS , então FOUND_ROWS() pode retornar um resultado diferente quando LIMIT é usado daquele que não é usado). Note que se você estiver usando SELECT SQL_CALC_FOUND_ROWS ... , o MySQL tem que calcular quantos registros existem em todo o conjunto de resultados. No entanto, isto é mais rápido que se você não utilizar LIMIT , já que o resultado precisa ser enviado ao cliente. SQL_CALC_FOUND_ROWS e FOUND_ROWS() podem ser úteis em situações em que você queira restringir o número de registros que uma consulta retorna, mas também determinar o número de linhas em todo o resultado sem executar a consulta novamente. Um exemplo é um script web que apresenta um display paginado contendo links para as páginas que mostram outras seções de um resultado de busca. Usar FOUND_ROWS() lhe permite determinar quantos outras páginas são necessárias para o resto do resultado.
O uso de SQL_CALC_FOUND_ROWS e FOUND_ROWS() é mais complexa para consultas UNION que para instruções SELECT simples, porque LIMIT pode ocorrer em vários lugares em um UNION. Ele pode ser aplicado a instruções SELECT individuais no UNION , ou globais ao resultado UNION como um todo. A intenção de SQL_CALC_FOUND_ROWS para UNION é que ele deve retornar a contagem das linhas que seriam retornadas sem um LIMIT global. As consições para uso de SQL_CALC_FOUND_ROWS com UNION são: