2017-12-28 2 views
-1

문자열이있어서이 문자열을 데이터베이스에 안전하게 저장하려고합니다.php7을 사용하여 salt로 암호화/암호 해독

그래서 내 마음에 떠오른 것은 사용자 비밀번호를 암호화 키로 사용하여이 문자열을 암호화하는 것입니다.

사용자가이 문자열을 사용해야 할 때 해당 키를 사용하여 암호를 해독합니다.

데이터베이스에 이러한 문자열을 안전하게 저장하고 누구도 팀에 액세스하지 못하도록하는 알고리즘이 있습니까?

+1

"관련"아래의 화면 오른쪽을 살펴보십시오. –

+0

php7 많은 함수가 사용되지 않으므로 5-8 년 전부터 거의 모든 질문이 있습니다. – Adam

+1

소금은 해시를 일치시킬 때 무지개 표를 사용하지 못하도록 해시 된 항목에 알려진 값을 추가하는 데 사용됩니다. 사용자 암호를 암호화 키로 사용하려는 경우 일 수 있습니다. –

답변

0

AES와 같은 공유 암호 암호화 알고리즘을 사용하고 싶습니다. openssl과 mcrypt 모두이 기능을 지원해야합니다. mcrypt는 EOL이므로 openssl을 권하고 싶습니다.

다음 예는 php.net에서 직접 가져온 것입니다. 원본 데이터를 가져 오려면 hmac이 필요하지 않습니다.

<?php 
//$key previously generated safely, ie: openssl_random_pseudo_bytes 
$plaintext = "message to be encrypted"; 
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC"); 
$iv = openssl_random_pseudo_bytes($ivlen); 
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv); 
//$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true); 
$ciphertext = base64_encode($iv./*$hmac.*/$ciphertext_raw); 

//decrypt later.... 
$c = base64_decode($ciphertext); 
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC"); 
$iv = substr($c, 0, $ivlen); 
//$hmac = substr($c, $ivlen, $sha2len=32); 
$ciphertext_raw = substr($c, $ivlen/*+$sha2len*/); 
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv); 
/* 
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true); 
if (hash_equals($hmac, $calcmac))//PHP 5.6+ timing attack safe comparison 
{ 
    echo $original_plaintext."\n"; 
} 
*/ 
+0

저는 이미 이것을 사용하고 있지만 민감한 데이터에 대해 안전한지 알고 싶었습니다. – Adam

+0

사용 된 암호화 알고리즘만큼 안전합니다. 해당 알고리즘이 충분한 지 여부는 요구 사항에 따라 다릅니다. 키 길이/블록 크기 등에 대한 권장 사항은 NIST에서 확인해야합니다. @summerSu 제안을 사용하여 데이터 암호를 해독 할 수있는 유일한 사용자이고 사용자 암호가 해시 된 경우 무차별 균열 고려 사항을 제외하고는 충분히 안전해야합니다 . –

+0

우리가 직접 키 (예 : md5 사용자 암호)를 사용하기 전에 사용자 암호 (암호화 키로 사용함)를 암호화 한 경우 사용자 암호가 약한 경우 임의의 유형의 무차별 공격을 피합니다. – Adam

관련 문제