双向加密问题,高手快点来啊 我猜猜,你看看对不对:注册cookie时,把原始数据根据$key做 异或位运算 然后再base64编码,($key如何取值并不重要)读取cookie时,把cookie中数据base64解码,然后按照同样的$key 做异或位运算 得到原始数据。A 异或 B = CC 异或 B = A 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 恩,楼上的似乎有门道了,可是这里的运算是如何进行的呢,如果我直接对读取的COOKIE进行base64解码比如这里的BTxVX1oBWwRcBgMIBFYFUwICAwEGC10HCAZcCVkABAYHVQ%3D%3D这串字符解码得到的仍然是是乱码,关键是如何运算的,还请指点 关键在于$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);这个$key绝不是无所谓的!由于他使用了用户登陆名和数据库信息,所以对于任意用户来说都是唯一的其他的事情就是扰码了加密:输入串按字节与$key做异或运算返回结果的base64编码解密:base64解码后的输入串按字节与$key做异或运算返回结果如果你将md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash'])改为md5(1),使$key变成恒定值。那么这个函数就可以完成一般的加密解密工作,只是输入串的长度是有限制的 to 唠叨老大,搂住:首先为我的不负责任随便乱说而道歉。我的意思是说,$key对于产生的结果的影响都是异或运算的影响,至于如何产生的$key在结果来说,可以不必关心它。但是,话说回来这个算法的关键可能就是$key的选取了。下面我来猜测下选取这个东西的意义:对于不知道源代码的人来说,这样的加密,完全没有规律,base64解密后仍然是乱码,毫无规律,自然不必说。而对于知道源码的人来说,实际上这样的数据也很难获得。而恰恰这两个参数对于用户和服务器有可以算作是唯一且可重现的。因此用2个字符串的某个组合然后md5。:)至于base64当然是避免特殊字符的产生拉。对于8,18的选择,我就不知道是代表什么了,对于md5没仔细看过个人感觉好像随便哈。熟悉的人可以给个解答:P呵呵,唠叨老大也给批批,呵呵,要不是你说,我还真没有想这么多。 我想知道,知道源码&结果,但是不知道 $key ,可否获得原字符串? 谁说不能呢?$winduser = 'aaa';echo $winduser = StrCode($winduser,'ENCODE');//out AFEDecho StrCode($winduser,'DECODE');//out aaafunction StrCode($string,$action='ENCODE'){//$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);$key = substr(md5(1),8,18);$string= $action == 'ENCODE' ? $string : base64_decode($string);$len= strlen($key);$code= '';for($i=0; $i<strlen($string); $i++){$k= $i % $len;$code .= $string[$i] ^ $key[$k];}$code = $action == 'DECODE' ? $code : base64_encode($code);return $code;}注意,我修改了$key的生成代码,因为我不在你的环境中,无法取得相应的$_SERVER["HTTP_USER_AGENT"] 和 $GLOBALS['db_hash'] 恩,明白了,最后一个问题这个DB_HASH是个什么东东呀 你的 config 文件应该有 DB_HASH 的设置,一个定值.我想知道,知道源码&结果,但是不知道 $key ,可否获得原字符串?有谁知道吗 应该是不行,知道源码本身没有任何用处,它是为了帮助你通过其它手段获取$key,就像唠叨老大为了解释问题而作的md5(1)这样的修改,你就能通过源码算出$key,这样就能知道原字符串了。但是,phpwind中所用的是用户自身信息和服务器信息的混合值,而服务器的信息别人又无法获取,因此这种方式才算有效。(其实就是找到一个只能在服务器端获取,并且能唯一表示一个登陆用户的这样的标识码来做$key,安全性跟这个$key的获取难度、仿造难度有关;另外一点存在的问题是,这个唯一是充分不必要条件还是充要条件,显然这里的是充分不必要条件,在实际中就会有可能由于一些变动导致之前的cookie的失效。 不过话说回来,这个不影响什么啦) 在 phpmyadmin 中,采用的是 Blowfish 算法来加密COOKIE,但 Blowfish 算法代码很长,而且经测试,运行效率很低.如果知道源码&结果,但是不知道 $key ,不能获得原字符串的话,不如用这个算法代替算了? curl_exec 怎么转array(),不要嫌分少,请帮助我 如何在进入网站时插入falsh? 急急急!!!安装SupeSite出错 php项目实战群。 散分 请帮忙写一条MYSQL语句关于如何查询本周的数据。 如何随机读取记录? 在线等,请高手们帮帮忙!!!刚学做网页,遇到了问题 正则的一个小问题,有结果马上结帖 php源码怎么看(如COM方面的)?用什么工具? 还有一个问题,我怎么的到访客用的是什么操作系统啊,载线等 谁能讲一下php 连接 mysql的原理 求个PHP源码网址站
$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);
这个$key绝不是无所谓的!由于他使用了用户登陆名和数据库信息,所以对于任意用户来说都是唯一的其他的事情就是扰码了
加密:
输入串按字节与$key做异或运算
返回结果的base64编码解密:
base64解码后的输入串按字节与$key做异或运算
返回结果如果你将md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash'])改为md5(1),使$key变成恒定值。那么这个函数就可以完成一般的加密解密工作,只是输入串的长度是有限制的
首先为我的不负责任随便乱说而道歉。我的意思是说,$key对于产生的结果的影响都是异或运算的影响,至于如何产生的$key在结果来说,可以不必关心它。但是,话说回来这个算法的关键可能就是$key的选取了。
下面我来猜测下选取这个东西的意义:
对于不知道源代码的人来说,这样的加密,完全没有规律,base64解密后仍然是乱码,毫无规律,自然不必说。
而对于知道源码的人来说,实际上这样的数据也很难获得。而恰恰这两个参数对于用户和服务器有可以算作是唯一且可重现的。因此用2个字符串的某个组合然后md5。:)至于base64当然是避免特殊字符的产生拉。对于8,18的选择,我就不知道是代表什么了,对于md5没仔细看过个人感觉好像随便哈。熟悉的人可以给个解答:P
呵呵,唠叨老大也给批批,
呵呵,要不是你说,我还真没有想这么多。
echo $winduser = StrCode($winduser,'ENCODE');//out AFED
echo StrCode($winduser,'DECODE');//out aaafunction StrCode($string,$action='ENCODE'){
//$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);
$key = substr(md5(1),8,18);
$string= $action == 'ENCODE' ? $string : base64_decode($string);
$len= strlen($key);
$code= '';
for($i=0; $i<strlen($string); $i++){
$k= $i % $len;
$code .= $string[$i] ^ $key[$k];
}
$code = $action == 'DECODE' ? $code : base64_encode($code);
return $code;
}注意,我修改了$key的生成代码,因为我不在你的环境中,无法取得相应的$_SERVER["HTTP_USER_AGENT"] 和 $GLOBALS['db_hash']
但是,phpwind中所用的是用户自身信息和服务器信息的混合值,而服务器的信息别人又无法获取,因此这种方式才算有效。(其实就是找到一个只能在服务器端获取,并且能唯一表示一个登陆用户的这样的标识码来做$key,安全性跟这个$key的获取难度、仿造难度有关;另外一点存在的问题是,这个唯一是充分不必要条件还是充要条件,显然这里的是充分不必要条件,在实际中就会有可能由于一些变动导致之前的cookie的失效。 不过话说回来,这个不影响什么啦)
而且经测试,运行效率很低.如果知道源码&结果,但是不知道 $key ,不能获得原字符串的话,不如用这个算法代替算了?