2011-10-09 6 views
0

데이터 또는 객체 배열을 암호화하고이를 hash 직렬화 된 문자열로 반환 할 수있는 최상의 암호화/암호 해독 클래스/함수는 무엇입니까?암호화/암호 해독 PHP 클래스

그런 다음 암호 해독시 직렬화 된 문자열을 개체 또는 배열 값을 포함하는 원래 값 형식으로 다시 해독 할 수 있습니다.

감사

답변

2

mcrypt 라이브러리에는 꿈꾸는만큼 많은 방법으로 암호화를 수행하는 많은 기능이 있습니다. 다음은 AES를 사용한 예입니다.

$secretKey = 'the longer, the better'; 
$originalString = 'some text here'; 

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secretKey, $originalString, 
           MCRYPT_MODE_CBC, $iv); 
printf("Original string: %s\n", $originalString); 
// Returns "Original string: some text here" 

printf("Encrypted string: %s\n", $crypttext); 
// Returns "Encrypted string: <gibberish>" 

$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secretKey, $crypttext, 
           MCRYPT_MODE_CBC, $iv); 

// Drop nulls from end of string 
$decrypttext = rtrim($decrypttext, "\0"); 

printf("Decrypted string: %s\n", $decrypttext); 
// Returns "Decrypted string: some text here" 
+0

다른 시스템과 쉽게 상호 운용 할 계획이라면 MCRYPT_RIJNDAEL_256을 사용하지 않는 것이 좋습니다. AES를 포함한 Rijandael의 대부분의 구현은 128 비트 블록 크기를 사용합니다. 256 비트 블록 크기로 작업하면 다른 시스템이 PHP 서비스와 통신 할 수있는 PITA가 될 수 있습니다. 여전히 256 비트 키를 128 비트 Rijandael 블록과 함께 사용할 수 있습니다. –

3

서문 : 당신은 일부 데이터를 해싱를 암호화와 같은 일이 될 것이라는 생각을 갖고있는 것 같다. 해싱은 이 아니고 암호화이며 암호화와 마찬가지로 비밀번호 나 키 파일로 되돌릴 수 없습니다.

PHP는 md5 (md5_file), SHA1 (SHA1_file)과 같은 몇 가지 해싱 프로토콜을 제공합니다. 이 모든 것은 실제로이 해시로 수행중인 작업과 처음부터 해싱을 수행하는 작업에 따라 달라집니다.

+2

+1. 알고리즘이 취약하기 때문에 사용자가 고의적으로 충돌을 일으킬까 걱정한다면 MD5가 좋지 않습니다. SHA1은 속도면에서 좋습니다. Bcrypt는 물건을 느리게하려는 경우에 좋습니다. 모든 종류의 다른 사람들. – ceejayoz

+0

그래, 내 질문을 수정, 내 목적은 영구적으로 데이터를 되돌릴 수없는 문자열로 암호화하지 않습니다. 대신 객체 또는 배열을 해독 할 수있는 방법을보고 싶습니다. – YajeDev