2013-05-28 30 views
0

我正在構建一個Web服務,我希望我的用戶在註冊之前可以使用它。然後我會給他們一個註冊碼。如何加密URL?

當他們打電話給我的服務時,他們會通過我的註冊碼。然後我會解密密鑰來驗證用戶和服務。

我嘗試過使用AES進行加密,但關鍵過大。是否有另一種加密方式,可以給我一個可以在URL中傳遞的較小密鑰。

我希望它是可解密的,以避免數據庫查找。

感謝

編輯:對不起,我沒有繞過AES密鑰,我的意思是加密AES值。如果我正確計算,這是96個字節。

+2

「我希望它是可解密的,所以爲了避免數據庫查找」就像使用任何其他正常服務一樣使用數據庫存儲的密鑰。 – sed

+0

你的意思是「鑰匙太大了」?定義「太大」。 –

+0

@KirkWoll他意味着它對URI部分來說太大了。可能超過2k個字符。 – sed

回答

1

即使密鑰非常大,來自AES的加密數據也不會太大。 URL參數的大小可能相當大,但這完全取決於您需要加密的內容。 在解密Web服務中的密鑰時,數據庫查找可能比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 

之後,你脫光鹽,就大功告成了。