我正在构建一个 Web 服务,我希望我的用户在使用它之前先注册它。然后我会给他们一个注册密钥。
当他们致电我的服务时,他们会将注册密钥传递给我。然后我将解密密钥以验证用户和服务。
我尝试使用 AES 进行加密,但密钥太大了。是否有另一种加密方法可以为我提供可以在 URL 中传递的较小密钥。
我希望它是可解密的,以避免数据库查找。
谢谢
编辑:对不起,我没有传递 AES 密钥,我的意思是加密的 AES 值。如果我计算正确,那是 96 个字节。
我正在构建一个 Web 服务,我希望我的用户在使用它之前先注册它。然后我会给他们一个注册密钥。
当他们致电我的服务时,他们会将注册密钥传递给我。然后我将解密密钥以验证用户和服务。
我尝试使用 AES 进行加密,但密钥太大了。是否有另一种加密方法可以为我提供可以在 URL 中传递的较小密钥。
我希望它是可解密的,以避免数据库查找。
谢谢
编辑:对不起,我没有传递 AES 密钥,我的意思是加密的 AES 值。如果我计算正确,那是 96 个字节。
你不应该传递钥匙。您使用密钥来加密用户的 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
在那之后,你去掉盐,你就完成了。
来自 AES 的加密数据不会太大,即使密钥很大。URL 参数的大小可能非常大,但这完全取决于您需要加密的内容。在解密 Web 服务中的密钥时,数据库查找可能比 CPU 负载更快!
有很多选项,但任何散列或加密数据都可以编码为 Base64 之类的东西,这使得它可以通过 URL 发送。