当前位置:  开发笔记 > 编程语言 > 正文

PHP中的简单加密

如何解决《PHP中的简单加密》经验,为你挑选了2个好方法。

我正在构建一个带有源系统的系统,我在'网上提供可用于虚拟宠物的网络.该系统将主要由儿童拥有.因为我希望它可用于绝对的初学者程序员,所以我的系统有几个复杂性限制:它不能使用通常不附带PHP的库,也不能触及数据库或写入其他永久存储器.

当每只宠物被采用时,访客将随机获得该宠物的一系列略有不同的变体之一.变化最初看起来是一样的,但随着时间的推移长大成为不同的宠物.访问者将获得HTML的简短代码,该代码链接到他们宠物的图像.由于服务器端没有永久存储空间,因此用户的图像链接必须包含所有信息,以确定他们最终获得的宠物变体.

目前,URL只包含宠物的ID和用户获得的变体的ID.这样做的问题在于,通过将代码相互比较,用户可以确定其中的哪些人最终得到了相同的变体.由于某些变化比其他变化更少,因此用户可以在差异甚至在视觉上明显之前轻松发现罕见的变化.

我想要的是URL中的详细信息的加密系统.掩盖变体ID的东西,以便每个用户获得具有高概率的不同URL.我想过使用变量ID(3或4位)作为大随机数的低位或高位,但是用户会在其中发现模式.理想情况下,加密系统将进行参数化,以便我的系统的每个安装都使用稍微不同的加密.

PHP的mcrypt库可能会有一些有用的东西,但在主机中似乎并不常见.

我可以在这里使用简单的,参数化的混淆/加密吗?



1> 小智..:

您正在寻找"一次填充"加密.它需要一个键并为字符添加模数以创建加密字符串.

function ecrypt($str){
  $key = "abc123 as long as you want bla bla bla";
  for($i=0; $i

这就是简单的字符串加密.我要做的是序列化用户参数的数组并将其作为链接中的变量传递:

$arr = array(
  'pet_name'=>"fido",
  'favorite_food'=>"cat poop",
  'unique_id'=>3848908043
);
$param_string = encrypt(serialize($arr));

$link = "/load_pet.php?params=$param_string";

在load_pet.php中你应该做相反的事情:

$param_string = $_GET["params"];
$params = unserialize(decrypt($param_string));

巴姆.



2> SoapBox..:

如果您期望相对较低的复杂程度,那么您可以进行非常简单的"xor"加密并将密钥"存储"为URL的一部分.然后你可以使用php的rand()或/ dev/random或其他任何东西来生成密钥.

低级别的用户不会轻易弄清楚他们需要做的只是他们的宠物ID的下半部分和上半部分,以获得可以与他们的朋友比较的值.我猜大多数能够认识到这一点的人都不会花时间弄明白,而且那些人无论如何都不在你的目标受众之外.

编辑:如果不明显,我说你给每个宠物一个不同的钥匙(因为给同一个宠物不会解决你的问题).因此,如果宠物变体(petvar)是16位数,则生成一个16位随机数(rnd),然后执行此操作:petvar = (petvar^rnd)<<16 | rnd;然后您可以反转该操作以提取rnd然后petvar ^ rnd,然后只是再次获得原始的petvar.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有