2017-12-29 4 views
0

나는이 기능을 되돌리려 고 노력하면서 내 마음을 거의 잃어 버렸고, 내 친구는 "전문가"에게 물어 보려고 제안했다. 그래서 나는 여기에있다.암호화 된 문자열을 해독하는 방법은 무엇입니까?

<?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; 
?> 

출력은 다음과 같습니다

P8avDeviXdd7bKfNMP0gwmZmZjg1OWMzOWFlNzRiMzU2Y2JiMTQ5OTY4MTI3MWNiYjQzYjBkMTAyNDUzM2ZhNGJjZmZhNzQ4M2QxN2M0ZGYwMDAwMDAxNN2xStdw/bhxIxSOevRp37HiXJeVXz7Ge31KEvq9dZjT 

다시 읽을 수있는 하나에 암호화 된 텍스트를 해결에 도움이? 감사합니다. .

+0

mcrypt가 depprecated입니다. PHP7에서는 사용할 수 없습니다. 'openssl_encrypt()'및 'decrypt'를 사용하십시오. http://php.net/manual/en/function.openssl-encrypt.php – halojoy

+0

시간을내어 주셔서 감사합니다. 마음에 둡니다.하지만 지금은 위의 문제를 해결하는 데 도움이되지 않습니다. –

+0

암호로 사용하지 마십시오. 그렇다면 프로덕션 환경에서 이것을 사용하지 마십시오. – Akintunde007

답변

1

암호화 기능을 사용하면 많은 헛소리가 발생하며 모든 프로덕션 환경에서 실행되지 않기를 바랍니다.

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

그래서 뭐죠 암호화 데이터에 남은 것은 IV 벡터 (및 일부 불필요한 데이터의 72 개 문자) 및 암호화 된 데이터 자체 -이 역전

base64로 인코딩 매우 쉽다

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

참고 :이 코드는 제작에 사용하지 마십시오! Nowdays AES128이 안전하지 않습니다.

+0

당신을 사랑합니다 미스터 필립, 제발 존경과 감사의 말을 모두 들어 주시길 바랍니다. 답을 고맙게 생각합니다. 그러나 위의 이유로 코드를 복사했거나 이유가 있기 때문에, 해결할 몇 가지 텍스트가 있습니다. 다시 한 번 감사드립니다. –

+0

나는 당신의 코드를 연구하고 그것을 테스트했다. 그것은 완벽하다, 다시 감사한다. Mr Philipp –

관련 문제