您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

关于DZ的Authcode函数转JS版的问题

2025/4/2 21:30:02发布22次查看
本帖最后由 tottyandbaty 于 2013-08-30 23:43:38 编辑
之前论坛有人问起过这个问题,原文
http://bbs.csdn.net/topics/390310377?page=1#post-393233055
我尝试把这个php版本的authcode写成了js版本的,但是结果相差太远。
php中对应js的一些函数可以在这里找到:
chr: http://phpjs.org/functions/chr/
ord: http://phpjs.org/functions/ord/
base64.encode,base64.decode  http://www.webtoolkit.info/javascript-base64.html
md5: http://phpjs.org/functions/md5/
其中base64.encode和base64.decode 测试结果与php的一样、。
那个帖子中, 版主说“由于涉及字符集问题(js 始终使用unicode),直译后与php不对等,没有大大意义”。
dz的authcode函数中用了rc4算法,
for($a = $j = $i = 0; $i =10) str = tmpstr.substr(0,10)+md5(str+keyb).substr(0, 16)+str; else { var count = 10 - tmpstr.length; for(var i=0;i php 版:
// 参数解释 // $string: 明文 或 密文 // $operation:decode表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function authcode($string, $operation = 'decode', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $globals['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'decode' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'decode' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i =10) string = tmpstr.substr(0,10)+md5(str+keyb).substr(0, 16)+str; else { var count = 10 - tmpstr.length; for(var i=0;i 这里基本上没采用替代版的chr,ord,等,都用的js只带的。我的测试页面编码都是utf-8编码。
这里的base64.encode与php的base64_encode结果一样。
前文说的ord,chr 都有提供js版本的。
chr:http://phpjs.org/functions/chr/
ord:http://phpjs.org/functions/ord/
原本放在源码的加密解密数据,你现在用js来实现,那么问一下,密匙你准备怎么处理?直接放在js里么?
原本放在源码的加密解密数据,你现在用js来实现,那么问一下,密匙你准备怎么处理?直接放在js里么?
傻逼客户说明文传输。。。。二逼老板慌了。。。所以要求客户端加密。。。。
原本放在源码的加密解密数据,你现在用js来实现,那么问一下,密匙你准备怎么处理?直接放在js里么?
傻逼客户说明文传输。。。。二逼老板慌了。。。所以要求客户端加密。。。。
努力攻克难关,交货后让他们被黑掉吧
原本放在源码的加密解密数据,你现在用js来实现,那么问一下,密匙你准备怎么处理?直接放在js里么?
傻逼客户说明文传输。。。。二逼老板慌了。。。所以要求客户端加密。。。。
努力攻克难关,交货后让他们被黑掉吧
唉,想通了。这样做没意义。客户端的,都是可见的。
我参考了tx的登录加密的办法,放弃这个了。。
原本放在源码的加密解密数据,你现在用js来实现,那么问一下,密匙你准备怎么处理?直接放在js里么?
傻逼客户说明文传输。。。。二逼老板慌了。。。所以要求客户端加密。。。。
努力攻克难关,交货后让他们被黑掉吧
唉,想通了。这样做没意义。客户端的,都是可见的。
我参考了tx的登录加密的办法,放弃这个了。。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product