Pergunta

Gostaria de cordas criptografar o que poderia potencialmente ser apenas cerca de três ou quatro caracteres, mas correr para cerca de vinte caracteres. Uma função hash ( MD5 , sha1 , cripta etc) não é adequado como eu gostaria de ser capaz de decifrar a informação também. A mcrypt extensão tem uma disposição completamente assustadora de possibilidades.

Alguém tem alguma idéia sobre a melhor maneira de seqüências curtas com segurança criptografar e por ? Alguém tem qualquer relação com qualquer material que introduzem um programador casual para cenários de criptografia práticos?

Foi útil?

Solução

Eu recomendo as sugestões de Chris Kite . Sem saber mais sobre o que você está fazendo, por que, e as ameaças você antecipar a necessidade de proteger contra AES-128 é provavelmente suficiente. A capacidade de usar a criptografia simétrica é ótimo para um aplicativo independente que será ao mesmo tempo o decoder e codificador de dados. Como ambos Chris Kite e Aracnídeo , disse, devido ao pequeno tamanho de seus dados é aconselhável que você preencher os dados e usar um aleatória Inicialização Vector.

Update: Quanto ao porquê .... se os dados é pequeno o suficiente, eo IV pode ser previsto, é possível força bruta do texto simples, gerando cifra-texto para cada combinação de texto simples com o IV conhecidas e combinando-o até a cifra de texto capturado. Em suma, esta é a forma como arco-íris mesas de trabalho.

Agora, se você estiver indo para criptografar em um servidor e descriptografar em outro eu iria com as sugestões de pdavis . Usando um método assimétrico você é capaz de separar as chaves de criptografia das chaves de decodificação. Dessa forma, se o servidor que os dados criptografa está comprometido, o atacante ainda é incapaz de descriptografar os dados.

Se você é capaz de, ele iria ajudar a comunidade para saber mais sobre seu caso de uso para a criptografia. Como eu mencionei acima, ter uma compreensão adequada das ameaças plausíveis é a chave quando se avalia os controles de segurança.

Outras dicas

Eu gosto de usar o GnuPG para qualquer coisa que precisa ser criptografados em um servidor e, em seguida, possivelmente descriptografado quer no servidor ou em outro servidor (que geralmente é o meu caso). Isto permite um nível extra de segurança, já que no meu cenário o servidor criptografar não tem a chave para descriptografar os dados. Ele também permite que para facilitar a descriptografia manual. Existem algumas boas invólucros disponíveis para vários idiomas (Outra vantagem), um para PHP é GnuPGP PHP Classe .

mcrypt está ligado em mais versões do PHP por padrão. Ele contém todos os primitivos é provável que você necessidade. Sem saber mais sobre o que você está criptografia, o que o seu modelo de ameaça é, etc, é difícil dar recomendações concretas sobre o algoritmo, modo de operação, etc usar.

Uma coisa eu posso dizer com certeza: Com cadeias de texto curtas, é mais vital do que nunca que você deve usar um original, aleatório vetor de inicialização. Caso contrário, é trivial para alguém para montar uma variedade de ataques contra os dados criptografados.

Isso importa se alguém pode decifrá-lo? Se você está apenas tentando ofuscar ele um pouco , use ROT13. É velha escola.

Eu concordo com Chris Kite - basta usar AES 128, isso está longe suficiente

.

Eu não sei exatamente o seu ambiente, mas eu acho que você está transmitindo os dados de alguma forma através da internet.

Não use BCE, este será sempre produzem o mesmo resultado para o mesmo texto simples.

modo CBC é o caminho a percorrer e não se esqueça de um vetor de inicialização aleatório. Este vector tem de ser comunicado com o texto cifrado e podem ser enviadas em claro.

No que diz respeito a seus dados, uma vez AES é uma cifra de bloco, o resultado é sempre um múltiplo do tamanho do bloco. Se você não quer deixar o know observador se os seus dados é curto ou longo, adicionar algum estofo para estendê-lo até o tamanho máximo esperado.

Se você quiser criptografar e descriptografar os dados dentro de um aplicativo, você provavelmente vai querer usar uma cifra de chave simétrica. AES, que é o algoritmo de criptografia simétrica bloco certificado pela NSA para proteger top dados secretos, é sua melhor escolha. Há uma implementação pura do PHP disponíveis em www.phpaes.com

Para seu uso parece AES128 é suficiente. Você vai querer usar o modo CBC com um vector de inicialização aleatória, ou então os mesmos dados serão sempre produzem o mesmo texto cifrado.

A escolha do algoritmo de criptografia direito é um bom primeiro passo, mas há muitos fatores para um sistema seguro que são difíceis de acertar, como gerenciamento de chave. Existem bons recursos lá fora, tais como Applied Cryptography de Bruce Schneier, e Engenharia de Segurança por Ross Anderson (disponível gratuitamente on-line).

Qualquer algoritmo de criptografia one-way, como Blowfish vai fazer, eu acho. Blowfish é rápido e aberto. Você pode usar Blowfish através da função crypt (). AFAIK não há nenhum algoritmo de criptografia que funciona especialmente bem em pequenas cadeias. Uma coisa a estar ciente de é que embora-forçando bruta essas pequenas cordas será muito fácil. Talvez você deve criptografar a string juntamente com um valor 'segredo' sal para segurança adicional.

Você pode usar as idéias gerais de programação sem depender em construído em criptografia funções / Decription Exemplo criar uma chamada de função it

function encryptstring($string) {

$string_length=strlen($string);
$encrychars=""; 
/**
*For each character of the given string generate the code
*/
for ($position = 0;$position<$string_length;$position++){        
    $key = (($string_length+$position)+1);
    $key = (255+$key) % 255;
    $get_char_to_be_encrypted = SUBSTR($string, $position, 1);
    $ascii_char = ORD($get_char_to_be_encrypted);
    $xored_char = $ascii_char ^ $key;  //xor operation
    $encrypted_char = CHR($xored_char);
    $encrychars .= $encrypted_char;
} 
/**
*Return the encrypted/decrypted string
*/
return $encrychars;
}

Na página com link para incluir o ID é necessário para ser criptografadas

   /**
    *While passing the unique value to a link
    *Do the following steps
    */

    $id=57;//or if you are fetching it automatically just pass it here
     /**
     *For more security multiply some value
     *You can set the multiplication value in config file
     */
     $passstring=$id*346244;
     $encrypted_string=encryptstring($passstring);
     $param=urlencode($encrypted_string);
     /**
     *Derive the url for the link
     */
     echo '<a href="target_file.php?aZ98#9A_KL='.$param.'">something</a>' ;

No arquivo de destino que se abriu após o link é clicado

     /**
      *Retriving the value in the target file
      *Do the following steps
      */
      $fetchid=$_GET['aZ98#9A_KL'];
      $passstring=urldecode(stripslashes($fetchid));
      $decrypted_string= encryptstring($passstring);
      /**
       *Divide the decrypted value with the same value we used for the multiplication
       */
      $actual_id= $decrypted_string/346244;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top