2016-07-14 18 views
0

Ich möchte DES verschlüsseln und entschlüsseln, aber Fortify Bericht sagen, sie sind Weak Encryption Wie kann ich dieses Problem lösen?DES verschlüsseln, aber Fortify Bericht Weak Encryption auf PHP 5.5.22

encrypt

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); 
    } 

decrypt

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); 
    } 

Bericht IssueGroup Weak Encryption

} 

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

und

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

Nun, wie wäre es mit etwas * weniger * schwach? DES wurde vor vielen Jahren von 3DES abgelöst, aber für neue Projekte sollten Sie etwas schneller und sicherer verwenden, wie AES (MCRYPT_RIJNDAEL_128). –

+2

Die Verwendung von 'Mcrypt' ** und ** DES ist so ziemlich das Schlimmste, was Sie tun könnten. –

+0

Eigentlich wurde DES von AES abgelöst, das war der ganze Sinn des Verschlüsselungsalgorithmus. 3DES war eine Stop-Gap-Maßnahme und bietet selbst mit einem vollen 168-Bit-Schlüssel nur 112-Bit-Sicherheit. – zaph

Antwort

1

DES ist, in der Tat schwache Verschlüsselung. Es wurde in den 90ern in weniger als 24 Stunden öffentlich gebrochen - das Problem ist, dass sein Schlüssel zu kurz ist, es ist möglich, ihn mit einem Brute-Force-Angriff zu knacken. Es eignet sich nicht mehr als Verteidigung gegen motivierte Angreifer. Es gibt eine Reihe von besseren Optionen wie 3DES, AES und Twofish.

Edit: 3DES ist besser als DES in dem Sinne, dass es wesentlich sicherer ist (aber immer noch weniger sicher als AES), aber seine Leistung notwendig ist deutlich schlechter als AES, DES, oder Twofish (weil du bist im Wesentlichen DES dreimal anwenden). 3DES wird nur selten für neue Implementierungen verwendet.

+0

Nein, 3DES und Twofish sind keine besonders guten Optionen, AES sollte verwendet werden, es sei denn, es gibt gute Gründe, einen anderen Verschlüsselungsalgorithmus mit symmetrischen Schlüsseln zu wählen. – zaph

+0

Ich stimme zu, 3DES ist eine schlechte Wahl (besonders weil es relativ langsam ist). Es ist immer noch deutlich besser als einzelne DES, aber sicherheitshalber werde ich bearbeiten, um das in meinem Beitrag klarer zu machen. Ich sehe jedoch kein Problem mit Twofish, es war ein AES-Finalist und es gilt immer noch als hochsicher (und wird wahrscheinlich für lange Zeit sicher bleiben). – EJoshuaS

+0

Ich mag Twofish nicht und bin mir dessen Geschichte und Autor bewusst. Zwei Probleme mit Twofish: 1. Es hat weniger Peer-Review, Überprüfung im Wesentlichen beendet, es wurde nicht für AES gewählt. 2. Aus der Sicht der Interoperabilität gibt es viele Systeme, die dies nicht gut unterstützen, die Unterstützung kann in Bezug auf die Geschwindigkeit und die Zertifizierung unterlegen sein. Ein Beispiel ist iOS, AES hat kryptografische Hardware-Unterstützung und bietet eine 500- bis 1000-fache Geschwindigkeitsverbesserung, CryptoSwift ist ein Beispiel dafür. Auch auf iOS und MacOS ist die AES-Version FIPS 140-2-zertifiziert (Implementierungsreview). – zaph