2013-05-28 6 views
0

사용자가 사용하기 전에 등록 할 웹 서비스를 구축 중입니다. 나는 그들에게 등록 키를 줄 것이다.URL을 암호화하는 방법은 무엇입니까?

그들이 내 서비스에 전화 할 때 그들은 나에게 등록 키를 전달합니다. 그런 다음 사용자와 서비스의 유효성을 검사하기 위해 키를 해독합니다.

암호화를 위해 AES를 사용해 보았지만 키가 너무 큽니다. URL을 전달할 수있는 더 작은 키를 제공하는 다른 방법으로 암호화 할 수 있습니까?

데이터베이스 조회를 피하기 위해 해독 가능하도록하고 싶습니다.

감사

편집 : 나는 AES 키 주위 통과되지 않았다 미안 해요, 암호화 된 AES 값을 의미했다. 내가 올바르게 계산하면 96 바이트였습니다.

+2

"데이터베이스 조회를 피하기 위해 해독 가능하도록 설정"다른 일반 서비스와 마찬가지로 데이터베이스에 저장된 키를 사용하기 만하면됩니다. – sed

+0

"열쇠가 너무 컸다"는 것은 무엇을 의미합니까? "너무 큼"을 정의하십시오. –

+0

@KirkWoll 그는 URI 부분에 비해 너무 큰 것을 의미합니다. 아마도 2K자를 초과 할 것입니다. – sed

답변

1

키가 아주 큰 경우에도 AES의 암호화 된 데이터가 너무 크지 않습니다. URL 매개 변수의 크기는 매우 클 수 있지만 암호화해야 할 항목에 따라 다릅니다. 데이터베이스 조회는 웹 서비스에서 키를 해독 할 때 CPU로드보다 빠릅니다.

많은 옵션이 있지만 해시 또는 암호화 된 데이터는 Base64와 같은 것으로 인코딩하여 URL을 통해 전송할 수 있습니다.

3

키를 지나쳐서는 안됩니다. 키를 사용하여 사용자의 ID를 암호화합니다 (예 :

$userID = 42; 
$crypted = aes_encrypt($key, $userID . "some random salting/padding stuff"); 
$encoded = base64_encoded($crypted); 

$url = "http://example.com?registrationConfirnmationID=$encoded"; 

는 당신이 등록 이메일을 통해 사용자 $ URL을 보낼 수 있습니다. 그들은 그것을 클릭하면 서버의 역을 수행

$encodedID = $_GET['registrationConfirmation']; 
$crypted = base64_decode($encodedID); 
$registrationString = aes_decrypt($key, $crypted); 

당신에게 그 후

42some random salting/padding stuff 

을 줄 것이다, 당신은 소금을 제거하면 완료됩니다.

관련 문제