我正在構建一個Web服務,我希望我的用戶在註冊之前可以使用它。然後我會給他們一個註冊碼。如何加密URL?
當他們打電話給我的服務時,他們會通過我的註冊碼。然後我會解密密鑰來驗證用戶和服務。
我嘗試過使用AES進行加密,但關鍵過大。是否有另一種加密方式,可以給我一個可以在URL中傳遞的較小密鑰。
我希望它是可解密的,以避免數據庫查找。
感謝
編輯:對不起,我沒有繞過AES密鑰,我的意思是加密AES值。如果我正確計算,這是96個字節。
我正在構建一個Web服務,我希望我的用戶在註冊之前可以使用它。然後我會給他們一個註冊碼。如何加密URL?
當他們打電話給我的服務時,他們會通過我的註冊碼。然後我會解密密鑰來驗證用戶和服務。
我嘗試過使用AES進行加密,但關鍵過大。是否有另一種加密方式,可以給我一個可以在URL中傳遞的較小密鑰。
我希望它是可解密的,以避免數據庫查找。
感謝
編輯:對不起,我沒有繞過AES密鑰,我的意思是加密AES值。如果我正確計算,這是96個字節。
即使密鑰非常大,來自AES的加密數據也不會太大。 URL參數的大小可能相當大,但這完全取決於您需要加密的內容。 在解密Web服務中的密鑰時,數據庫查找可能比CPU負載更快!
有很多選項,但是任何散列或加密數據都可以編碼爲像Base64這樣的東西,這使得它可以通過URL發送。
你不應該在關鍵處傳遞。您使用密鑰來加密用戶的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
之後,你脫光鹽,就大功告成了。
「我希望它是可解密的,所以爲了避免數據庫查找」就像使用任何其他正常服務一樣使用數據庫存儲的密鑰。 – sed
你的意思是「鑰匙太大了」?定義「太大」。 –
@KirkWoll他意味着它對URI部分來說太大了。可能超過2k個字符。 – sed