0

我正在构建一个 Web 服务,我希望我的用户在使用它之前先注册它。然后我会给他们一个注册密钥。

当他们致电我的服务时,他们会将注册密钥传递给我。然后我将解密密钥以验证用户和服务。

我尝试使用 AES 进行加密,但密钥太大了。是否有另一种加密方法可以为我提供可以在 URL 中传递的较小密钥。

我希望它是可解密的,以避免数据库查找。

谢谢

编辑:对不起,我没有传递 AES 密钥,我的意思是加密的 AES 值。如果我计算正确,那是 96 个字节。

4

2 回答 2

2

你不应该传递钥匙。您使用密钥来加密用户的 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

在那之后,你去掉盐,你就完成了。

于 2013-05-28T16:42:06.450 回答
1

来自 AES 的加密数据不会太大,即使密钥很大。URL 参数的大小可能非常大,但这完全取决于您需要加密的内容。在解密 Web 服务中的密钥时,数据库查找可能比 CPU 负载更快!

有很多选项,但任何散列或加密数据都可以编码为 Base64 之类的东西,这使得它可以通过 URL 发送。

于 2013-05-28T16:38:33.577 回答