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