目的:

对字符串‘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

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

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

可前端解密的加密方法探讨和str_replace和preg_replace分析的更多相关文章

  1. WebGIS中前端JS生成等值面方法探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博文<WebGIS中等值面展示的相关方案简析&g ...

  2. JavaScript加密解密7种方法总结分析

    原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...

  3. JavaScript加密解密7种方法

    注:本文纯转贴,供学习使用 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的javascript代码常常被别人轻易 ...

  4. 浅谈.NET中加密和解密的实现方法分享

    这篇文章介绍了.NET中加密和解密的实现方法,有需要的朋友可以参考一下 .NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利.它将CryptoAPI改编进.NET的Syste ...

  5. 前端和后台对接时对sign加密方法

    前端和后台对接时对sign加密方法 /*后台php对接进行sign标签加密 1 获取向后台请求的数据data(key/value方式),可以是个对象(obj),也可以是数组(arr); 2 将数据的k ...

  6. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  7. iOS里常见的几种信息编码、加密方法简单总结

    一.MD5 MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的 ...

  8. Java中常用的加密方法(JDK)

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. C# 加密总结 一些常见的加密方法

    C# 加密总结 一些常见的加密方法 一 散列数据 代码如下: ? private static string CalculateSHA512Hash(string input)         {   ...

随机推荐

  1. [Offer收割]编程练习赛97

    链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256 ...

  2. C. Edgy Trees

    链接 [https://codeforces.com/contest/1139/problem/C] 题意 给你n个点,n-1个边,无向的.有red和black的. k表示经过这k个点.可以跨其他点 ...

  3. Vladik and Complicated Book CodeForces - 811B (思维实现)

    Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...

  4. 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消

    使用线程池并发处理request请求及错误重试,使用委托处理UI界面输出. http://www.cnblogs.com/Charltsing/p/httpwebrequest.html for (i ...

  5. 【学习总结】C-翁恺老师-入门-总

    2019-1-2 翁恺老师C入门视频-启程 代码详见GitHub: 目录 第0周:程序设计与C语言 第1周:计算 第2周:判断 第3周:循环 第4周:循环控制 第5周:数据类型 第6周:函数 第7周: ...

  6. scoketio

    服务器代码let net = require('net'); // 创建服务器 let server = net.createServer(); // 定义一个数组 ,存放每一个连接服务器的客户端用户 ...

  7. React Native之获取通讯录信息并实现类通讯录列表(ios android)

    React Native之获取通讯录信息并实现类通讯录列表(ios android) 一,需求分析 1,获取通讯录信息,筛选出通讯录里有多少好友在使用某个应用. 2,获取通讯录信息,实现类通讯录,可拨 ...

  8. [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的

    震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...

  9. 获取打开页面时的当前时间(yyyy-MM-dd hh:mm:ss)

    Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d ...

  10. 2017年前小纪(有关http的一些缓存理论知识)

    position的top和bottom的区别:前者基准点定在top,后者基准点定在bottom. for-in 遍历属性的顺序不确定 手机端,line-height对光标大小非常有影响 有些css3属 ...