目的:

对字符串‘123456’进行后端加密,前端js可解密出真实字符

测试代码php:

static $hashMap = array(
'0' => '4',
'1' => '9',
'2' => '1',
'3' => '7',
'4' => '2',
'5' => '8',
'6' => '3',
'7' => '6',
'8' => '5',
'9' => '0',
); print_r(array_keys($hashMap));echo '==1==';
print_r(array_values($hashMap));echo '==2=='; $a = '123456'; echo str_replace(array_keys($hashMap), array_values($hashMap), $a);

输出结果:

Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] => 9
)
==1==Array
(
[0] => 4
[1] => 9
[2] => 1
[3] => 7
[4] => 2
[5] => 8
[6] => 3
[7] => 6
[8] => 5
[9] => 0
)
==2==016253

可见输出结果是:016253

而不是:917283

由此可见str_replace并不是对要替换的字符串依照数组对应关系进行一次性替换,而是根据替换的数组元素,对字符串的每个元素进行挨个替换,替换的字符串为上一次替换的结果

替换过程如下:

对0进行替换:123456
对1进行替换:923456
对2进行替换:913456
对3进行替换:917456
对4进行替换:917256
对5进行替换:917286
对6进行替换:917283
对7进行替换:916283
对8进行替换:916253
对9进行替换:016253

最终得到“016253”

preg_replace和str_replace替换规则一致,只是替换规则数组要改成正则方式:

static $hashMap = array(
'/0/' => '4',
'/1/' => '9',
'/2/' => '1',
'/3/' => '7',
'/4/' => '2',
'/5/' => '8',
'/6/' => '3',
'/7/' => '6',
'/8/' => '5',
'/9/' => '0',
);

那如果想只是简单的按照加密序列值只进行单个字母或数字的一次性替换该怎么办?、

目前可以考虑用字符串循环的方式挨个替换一次,如下:

    public static function mixHash($str=''){

        static $hashMap = array(
'0' => '4',
'1' => '9',
'2' => '1',
'3' => '7',
'4' => '2',
'5' => '8',
'6' => '3',
'7' => '6',
'8' => '5',
'9' => '0',
); $b='';
for($i=0; $i<strlen($str); $i++){
if(isset($hashMap[substr($str, $i, 1)])){
$b .= (string)$hashMap[substr($str, $i, 1)];
}else{
$b .= (string)substr($str, $i, 1);
}
}
return $b;
}

对应前端可以进行反向解密:

function decodeHash(str){
str += '';
var hashMap = {
'4': '0',
'9': '1',
'1': '2',
'7': '3',
'2': '4',
'8': '5',
'3': '6',
'6': '7',
'5': '8',
'0': '9',
};
var b = '';
for(var i=0;i<str.length;i++){
if(hashMap[str.substr(i,1)]){
b += hashMap[str.substr(i,1)]
}else{
b += str.substr(i,1)
}
}
return b;
}

这样 123456 加密后就变成了:917283

这种方法较笨,而且加密效果不是很好,只是简单的混淆。

如果你有更好的方法,期待留言一起探讨~

最新文章

  1. 用ElasticSearch和Protovis实现数据可视化
  2. Nmap 使用指南
  3. [转载]&ldquo;浅拷贝&rdquo;与&ldquo;深拷贝&rdquo;
  4. 18.python的异常处理
  5. void *p 类型,illegal indirection错误
  6. js中有关滑动问题的一些理解
  7. Headfirst设计模式的C++实现——策略模式(Strategy)
  8. 常见HTTP状态码大全
  9. iOS8 Core Image In Swift:更复杂的滤镜
  10. python导入模块的方法
  11. underscore api 概览
  12. Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素
  13. angular的时间指令 以及防止闪烁问题
  14. cocos2D v3.4 在TileMap中开启高清显示
  15. 浮点数据有损压缩算法 附完整C代码
  16. &quot;unexpected console statement” in Node.js
  17. JS生成当前月份包括最近12个月内的月份
  18. c 字符数组与字符串
  19. BZOJ3251:树上三角形(乱搞)
  20. Linux的软中断处理实现 【转】

热门文章

  1. hdu3294(马拉车模板)
  2. 2018软工实践K班总结
  3. 【学习总结】vi/vim命令是使用
  4. yum 命令
  5. oninput事件和onchange事件区别
  6. laravel依赖注入 容器
  7. Appscanner实验还原code2
  8. keyvalue对RDD s
  9. QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装
  10. codeforces158C