关于虚拟卡显示星号的问题 分析 求解

2016-07-07 15:17 来源:www.chinab4c.com 作者:ecshop专家

我新安装了2.72的程序,使用虚拟卡后 卡号和卡密都显示为“星号” “***“
经过分析程序 发现是/admin/virtual_card.php里 有关于星号 看程序后 发现是由include/lib_code.php关于加密解密函数控制的。
virtual_card.php 控制的代码如下
  1. foreach ($all AS $key => $row)
  2. {
  3. if ($row['crc32'] == 0 || $row['crc32'] == crc32(AUTH_KEY))
  4. {
  5. $row['card_sn'] = decrypt($row['card_sn']);
  6. $row['card_password'] = decrypt($row['card_password']);
  7. }
  8. elseif ($row['crc32'] == crc32(OLD_AUTH_KEY))
  9. {
  10. $row['card_sn'] = decrypt($row['card_sn'], OLD_AUTH_KEY);
  11. $row['card_password'] = decrypt($row['card_password'], OLD_AUTH_KEY);
  12. }
  13. else
  14. {
  15. $row['card_sn'] = '***';
  16. $row['card_password'] = '***';
  17. }
复制代码
深入分析后发现
  1. $row['crc32'] == 0 || $row['crc32'] == crc32(AUTH_KEY))
复制代码
以及
  1. ($row['crc32'] == crc32(OLD_AUTH_KEY))
复制代码
主要是判断数据库中得crc32字段和经过crc32加密的字符串是否一致
但是发现
数据库中的crc32字符串和crc32加密的字符串 完全不一样所以导致了 出现卡号和卡密为星号的问题
比如我加密字符串设置的是456数据库中的crc32 显示为 2147483647而我直接代码crc32出来的值为 2980627313 所以导致了 卡号显示为三个***

目前还不知道为什么会不一样 还请高手告诉 可以吗?

回答:
经过测试 不管加密串如何更改 数据库中的 crc32 均为 2147483647 没有更改过。说明 插入数据库的时候 crc32没有取到 AUTH_KEY的值,但是因为2147483647是加密后的值 暂时无法知道他取成了什么值



自己写了个代码
设置 AUTH_KEY 为test
  1. <?
  2. define('IN_ECS', true);

  3. require(dirname(__FILE__) . '/includes/init.php');
  4. require_once(ROOT_PATH . 'includes/lib_code.php');
  5. echo AUTH_KEY;
  6. $s= crc32(AUTH_KEY);
  7. echo $s;
  8. ?>
复制代码
得到的crc32(AUTH_KEY)为正确的值3632233996 ,但是INSERT INTO 以后的数据库里的值死活就是2147483647,头皮一阵发麻。
手工吧数据库里的值改成0 后台才能正确显示卡号密码 ,很郁闷
只能吧 写入数据库那里crc32(AUTH_KEY);改成写成0
不过可能加密串就没法更改了。但是好歹能用了

帮顶吧。。

只能暂时用着,治标 没有 治本。没有从根本上解决问题。

有没有治本的方法啊 晓天




将数据库里的crc32字段的,类型从int(11),变为bigint(20)




太感谢了 能用了 呵呵