2017-03-07 8 views
0

기본 문장을 암호화하고 결과를 에코하는 작은 프로그램을 만들고 있습니다. 그런 다음 결과를 복사하여 복사하고 텍스트를 인코딩 한 것과 같은 방법으로 텍스트를 디코딩 할 수 있기를 원합니다. 너무 안전 할 필요는 없으므로 Mcrypt를 사용하기로했습니다.암호 해독하지 않습니다.

해독하려고하면 이상한 문자 (ASCII?)가 표시되고 어디에서 왔는지 이해할 수 없습니다. base64 인 코드/디코드로 해결하려고했으나 그다지 도움이되지 못했습니다. 제대로 작동하려면 무엇을 변경해야합니까? 나는 확실히 그것이 내가 함수 자체에 엉망이 무언가 아닙니다 확인하기 위해 암호화에 mcrypt_decrypt을 포함하는 경우

<?php 

// Define Mcrypt variables 
$enc = MCRYPT_RIJNDAEL_128; 
$mode = MCRYPT_MODE_CBC; 
$key = 'SanderDitIsNodigVoor16bi'; 
$iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM); 

// Check if 'submit' is set 
if (isset($_POST['submit'])) { 

    // Check if 'text' is set 
    if (!empty($_POST['text'])) { 

     // Check if 'crypt' is set 
     if (isset($_POST['crypt'])) { 

      // Retrieve 'text' 
      $input = $_POST['text']; 

      // Check for encrypt/decrypt 
      switch ($_POST['crypt']) { 
       case 'encrypt': 
        $result = encrypt(); 
        break; 
       case 'decrypt': 
        $result = decrypt(); 
        break; 
      } 

      echo $result; 
     } 

     // If 'crypt' is not set 
     else { 
      echo 'Please select encrypt or decrypt.'; 
     } 
    } 

    // If 'text' is not set 
    else { 
     echo 'Please fill in some text.'; 
    } 
} 

function encrypt() { 
    global $enc, $key, $input, $mode, $iv; 
    $encrypted = mcrypt_encrypt($enc, $key, $input, $mode, $iv); 
    $output = base64_encode($encrypted); 
    return $output; 
} 

function decrypt() { 
    global $enc, $key, $input, $mode, $iv; 
    $decrypted = base64_decode($input); 
    $output = mcrypt_decrypt($enc, $key, $decrypted, $mode, $iv); 
    return $output; 
} 

?> 

는, 명확하게하기 위해서는 제대로 해독한다. 그러나 둘을 분리하려고 할 때, 그렇지 않습니다. 나는 혼란 스럽다.

+2

암호화의 목적을 오해하고있을 수 있습니다. 보안이 필요하지 않은 경우 왜 암호화를 시작해야합니까? – happymacarts

+2

mcrypt는 사용하지 않는 것이 가장 좋습니다. abandonware이며, 수년 내에 업데이트되지 않았으며 표준 PKCS # 7 (nee PKCS # 5) 패딩을 지원하지 않으며, 바이너리와 함께 사용할 수없는 비표준 널 패딩 만 지원합니다 데이터. mcrypt는 2003 년으로 거슬러 올라가는 많은 [버그] (https://sourceforge.net/p/mcrypt/bugs/)를 가지고 있습니다. 대신 [defuse] (https://github.com/defuse/php-encryption) 또는 [RNCryptor] (https://github.com/RNCryptor), 그들은 완벽한 솔루션을 제공하고 있으며 유지 관리되고 있으며 정확합니다. – zaph

+0

암호화 개념에 대해 머리를 감싸는 것은 단지 운동입니다. 나는 OpenSLL 암호화로 뛰어 들었지만 이전 버전의 PHP를 실행하고 있으므로 저를 위해 작동하지 않습니다. – Sander

답변

1

당신은 동일한 입력, 모두 encryptdecrypt에 보내는 :

$input = $_POST['text']; 

암호화가 성공적으로 암호화합니다,하지만 당신은 항상 '해독'문구를 해독하기 위해 노력하고있다!

당신은 기능을

를 해독하기 위해 encrypted 문구를 통과해야하고 mcrypt_* 확장은 더 이상 사용되지되었다는 중요 사항에 대해 잊지 마세요 :

이 확장 libmcrypt에 의존하고 있기 때문에, 전혀 관리가되지 않고 죽은 2007.

잘 유지 관리되는 대체 (openssl, crypt, 암호 해시 함수, phpseclib,)로 전환하는 것을 고려하십시오.password_compat ...)

변수를 사용하고 global 변수를 사용하지 않는 것이 좋습니다.

+1

@Sander 예 : "전역 변수 사용 중지" – zaph

+0

코드는 어떤 버튼이 설정되어 있는지에 따라 각 함수를 호출하기 때문에 (완벽을 기하기 위해 HTML 양식도 추가해야 함), 그렇지 않습니다. 텍스트 입력이 둘 다 동일해야합니까? 당신은 '해독'을 선택하고 해독 된 텍스트를 넣어서 해독하고 그 반대의 경우도 마찬가지입니다. – Sander

+0

음, https://3v4l.org/kP9pM을 확인하고 테스트 정신적 목적을 위해 전달 된 값을 검사하기 위해 각 함수 내부에'$ input '을 표시합니다. – hassan