2016-07-14 1 views
0

Je veux à crypter DES et décrypter, mais fortifier le rapport disent qu'ils sont faible cryptage comment puis-je résoudre ce problème?DES crypter mais fortifier rapport Chiffrement faible sur PHP 5.5.22

Crypter

function encrypt($key, $encrypt) 
    { 
     $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC); 
     $pad = $size - (strlen($encrypt) % $size); 
     $encrypt = $encrypt . str_repeat(chr($pad), $pad); 
     $data = mcrypt_encrypt(MCRYPT_DES, $key, $encrypt, MCRYPT_MODE_CBC, $key); 

     return base64_encode($data); 
    } 

Décrypter

function decrypt($key, $decrypt) 
    { 
     $decrypt = base64_decode($decrypt); 
     $decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $decrypt, MCRYPT_MODE_CBC, $key); 
     $pad = ord($decrypt{strlen($decrypt) - 1}); 

     if ($pad > strlen($decrypt)) { 
      return false; 
     } 

     if (strspn($decrypt, chr($pad), strlen($decrypt) - $pad) != $pad) { 
      return false; 
     } 

     return substr($decrypt, 0, -1 * $pad); 
    } 

rapport IssueGroup chiffrement faible

} 

    $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC); 
    $pad = $size - (strlen($encrypt) % $size); 
    $encrypt = $encrypt . str_repeat(chr($pad), $pad); 

et

{ 
     $decrypt = base64_decode($decrypt); 
     $decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $decrypt, MCRYPT_MODE_CBC, $key); 
     $pad = ord($decrypt{strlen($decrypt) - 1}); 
+0

Eh bien, que diriez-vous d'utiliser quelque chose * moins * faible? DES a été remplacé par 3DES il y a de nombreuses années, mais pour les nouveaux projets, vous devriez utiliser quelque chose de plus rapide et plus sûr, comme AES (MCRYPT_RIJNDAEL_128). –

+2

Utiliser 'mcrypt' ** et ** DES est à peu près la pire chose que vous pourriez faire. –

+0

En fait, DES a été remplacé par AES, qui était le point entier de la concurrence de l'algorithme de chiffrement. 3DES était une mesure d'arrêt et même avec une clé de 168 bits complète, il n'y avait qu'une sécurité de 112 bits. – zaph

Répondre

1

DES est, en fait, faible chiffrement. Il a été publiquement brisé dans les années 90 en moins de 24 heures - le problème est que sa clé est trop courte, il est possible de la casser avec une attaque en force. Il ne convient plus comme défense contre les attaquants motivés. Il existe un certain nombre de meilleures options disponibles, telles que 3DES, AES et Twofish.

Edit: 3DES est mieux que DES dans le sens où il est beaucoup plus sûr (mais encore moins sûr que AES), mais sa performance est nécessairement bien pire que AES, DES, ou Twofish (parce que vous êtes essentiellement en appliquant le DES trois fois). 3DES est rarement utilisé pour de nouvelles implémentations.

+0

Non, 3DES et Twofish ne sont pas particulièrement bonnes options, AES devrait être utilisé à moins qu'il n'y ait des raisons bien comprises de choisir un autre algorithme de chiffrement de clé symétrique. – zaph

+0

Je suis d'accord, 3DES est un mauvais choix (surtout parce que c'est relativement lent). C'est toujours nettement mieux que le seul DES bien que, sur le plan de la sécurité, je vais modifier pour le rendre plus clair dans mon article. Je ne vois pas de problème avec Twofish, c'était un finaliste AES et il est toujours considéré comme hautement sécurisé (et il est susceptible de rester sécurisé pendant longtemps). – EJoshuaS

+0

Je ne déteste pas Twofish et suis conscient de son histoire et auteur. Deux problèmes avec Twofish: 1. Il a moins examen par les pairs, l'examen a essentiellement pris fin, il n'a pas été choisi pour AES. 2. Du point de vue de l'interopérabilité, il existe de nombreux systèmes qui ne le supportent pas bien, le support peut être inférieur en termes de vitesse et de certification. Un exemple est iOS, AES a un support cryptographique matériel et qui fournit une amélioration de la vitesse de 500 à 1000 fois, CryptoSwift en est un exemple. Toujours sur iOS et macOS, la version AES est certifiée FIPS 140-2 (mise en œuvre). – zaph