2017-12-29 24 views
0

Ich verlor fast meinen Verstand, als ich versuchte, diese Funktion umzukehren, ein Freund von mir schlug vor, "die Profis" zu fragen, damit ich hier bin.Wie verschlüsselte Zeichenfolge entschlüsseln?

<?php 
$data = "Data to be encrypted"; 
$ceva = $data; 
$textHos = 'MCRYPT_RIJNDAEL_128'; 
function encrypt($plaintext,$textHos) { 
    $textLen=str_pad(dechex(strlen($plaintext)),8, '0', STR_PAD_LEFT); 
    $salt='WSj2g7jTvc8ISmL60Akn'; 
    $textHosHash=hash('sha256',$salt.$textHos); 
    $textHos= md5($textHos,true); 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $textHos, 
           $plaintext, MCRYPT_MODE_CBC,$iv); 

    $ciphertext = $iv . $textHosHash . $textLen . $ciphertext; 
    $ciphertext_base64 = base64_encode($ciphertext); 
    return $ciphertext_base64; 
} 
$data = encrypt($ceva,$textHos); 
echo $data; 
?> 

Die Ausgabe lautet:

P8avDeviXdd7bKfNMP0gwmZmZjg1OWMzOWFlNzRiMzU2Y2JiMTQ5OTY4MTI3MWNiYjQzYjBkMTAyNDUzM2ZhNGJjZmZhNzQ4M2QxN2M0ZGYwMDAwMDAxNN2xStdw/bhxIxSOevRp37HiXJeVXz7Ge31KEvq9dZjT 

jede Hilfe mit dem verschlüsselten Text in ein lesbar man wieder zu lösen? Danke.

+0

mcrypt wird deaktiviert. Kann nicht in PHP7 verwendet werden. Verwenden Sie 'openssl_encrypt()' und 'entschlüsseln'. http://php.net/manual/en/function.openssl-encrypt.php – halojoy

+0

Danke für Ihre Zeit halojoy, ich werde es im Hinterkopf behalten, aber im Moment kann dies nicht hilfreich sein, mein Problem oben zu lösen. –

+0

Bitte sagen Sie mir, dies wird nicht für Passwörter verwendet. Wenn ja, benutze das nicht in der Produktion – Akintunde007

Antwort

1

Ihre Verschlüsselungsfunktion macht viel Unsinn und ich hoffe, dass sie in keiner Produktionsumgebung läuft.

function encrypt($plaintext,$textHos) { 
    // not needed.. 
    //$textLen=str_pad(dechex(strlen($plaintext)),8, '0', STR_PAD_LEFT); 
    //$salt='WSj2g7jTvc8ISmL60Akn'; 
    //$textHosHash=hash('sha256',$salt.$textHos); 

    $textHos = md5($textHos,true); 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $textHos, 
           $plaintext, MCRYPT_MODE_CBC,$iv); 

    // i commented out the unneccessary parts.. 
    $ciphertext = $iv /* . $textHosHash . $textLen . */ $ciphertext; 
    $ciphertext_base64 = base64_encode($ciphertext); 
    return $ciphertext_base64; 
} 

So was in den verschlüsselten Daten links sind der iv-Vektor (und 72 Zeichen einiger unnötigen Daten) und die verschlüsselten Daten selbst - codiert in Base64

dieser Umkehrung ist ganz einfach

function decrypt($ciphertext, $textHos) { 
    $text = base64_decode($ciphertext); 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
    $iv = substr($text, 0, $iv_size); 
    $textHos = md5($textHos, true); 
    // the +72 is neccessary for your original code - the code above doesn't need this part 
    $ciphertext = substr($text, $iv_size + 72); 
    $encrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $textHos, $ciphertext, MCRYPT_MODE_CBC, $iv); 
    return rtrim($encrypted, chr(0)); 
} 

Hinweis: BENUTZEN SIE DIESEN CODE NICHT IN DER PRODUKTION! Heute ist AES128 nicht sicher

+0

Ich liebe dich Herr Philipp, bitte akzeptieren Sie alle meine Respekt und danke, ich schätze Ihre Antwort, aber ich habe den Code oben aus einem Grund, ich habe einige Texte zu lösen. Danke noch einmal. –

+0

Ich habe deinen Code studiert und getestet, es ist perfekt, danke nochmal, Herr Philipp –

Verwandte Themen