2016-11-01 3 views
-3

현재 데이터를 암호화하기 위해 openssl_encrypt을 사용하고 있으며 base64 값을 반환합니다. 소금으로 AES 암호화를 사용해야합니다.Base64 대신 AES와 salt를 사용하여 openssl_encrypt로 암호화하는 방법

소금으로 AES 암호화를 구현하는 방법을 알려줄 수 있습니까?

function encrypt_decrypt($action, $string) 
{ 
    $output = false; 

    $encrypt_method = "AES-256-CBC"; 
    $secret_key = 'This is my secret key'; 
    $secret_iv = 'This is my secret iv'; 

    // hash 
    $key = hash('sha256', $secret_key); 

    // iv - encrypt method AES-256-CBC expects 16 bytes 
    $iv = substr(hash('sha256', $secret_iv), 0, 16); 

    if ($action == 'encrypt') { 
     $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv); 
     $output = base64_encode($output); 
    } else if ($action == 'decrypt') { 
     $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv); 
    } 

    return $output; 
} 
+0

암호화를 "소금 제거"하지 않습니다. 귀하의 질문은 매우 모호합니다. 더 자세하게 얘기해 주 시겠어요? –

답변

2

항상 같은 목적을 위해 테스트 라이브러리를 사용 : 여기


은 내가 사용하는 코드입니다. IV를 올바르게 사용하지 않기 때문에 암호화가 취약하고 완전히 안전하지 않습니다.

defuse/php-encryption 라이브러리를 사용해보고 수행 한 작업을 제거하십시오.

  • 같은 IV (초기화 벡터)를 사용 :

    왜 잘못 한 일이다. 암호화가 완료되면 당신의 IV는 항상 같은
  • , 당신은 암호화 된 데이터를 제공해야 -
  • 그것은 초기화 벡터라고하며 는 암호화 할 때마다 달라야합니다, 암호화에 더 소금 없다 IV - 암호화 결과가있는 IV는 반환하지 않고 결과 만 반환합니다.

현재 내가 설명한 내용을 수행하지 않으므로 암호화가 필요한 라이브러리를 사용하여 자신 만의 안전하지 않은 구현을 전개하지 않아도됩니다. 나는 의도적으로 코드를 게시하지 않습니다 사람이 그것을 사용하는 두려움에서 작동하도록 암호화가 필요합니다, 내가 링크 된 라이브러리 대신. 자신이 무엇을하고 있는지 전혀 모르는 경우 항상 다른 사람들이 만든 라이브러리를 사용하십시오.

관련 문제