目的:

对字符串‘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. oc之证书

    https://www.cnblogs.com/MrJalen/p/6813309.html iOS推送证书生成pem文件(详细步骤)   1.pem文件概述 pem文件是服务器向苹果服务器做推送时候 ...

  2. Python_服务器与多客户端通信、UDP协议、pycharm打印带颜色输出、时间同步的机制

    1.服务器与多客户端通信 import socket # 创建tcp socket的套接字 sk = socket.socket() # bind sk.bind(('127.0.0.1',8080) ...

  3. Composer之搭建自己的包工具

    作为一个标准的PHPer,必须学会优雅的使用composer,最近,萌生了一个想法,我们每搭建一个项目,里面都会有许多的公用的方法和类库,每次使用的时候就是将其拷贝过来,或者重新写一遍,过于繁琐,效率 ...

  4. [转帖]web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。

    web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全. https://www.cnblogs.com/1996V/p/7458377.html 感谢原作者写的内容 安全 ...

  5. linux下编译tex,bib成pdf文件

    参考linux下编译bib.tex生成pdf文件 为了编译出出正确的pdf文件,需要执行4条命令完成整个编译过程. 编译命令及输出 $ pdflatex bb.tex #目录下会生成bb.aux.bb ...

  6. opencv自带fast_math.hpp

    cvRound cvFloor cvCeil cvIsNaN cvIsInf

  7. npm的nrm命令使用--设置镜像地址

    npm下载会很慢,因为npm默认从国外下载资源,建议修改npm镜像源地址 1.运行npm i nrm -g全局安装nrm包: 2.使用nrm ls查看当前所有可用的镜像源地址以及当前所使用的镜像源地址 ...

  8. Chrome---谷歌浏览器修改用户缓存文件夹 如何设置缓存路径

    1.首先我们在电脑上打开chrome浏览器,然后地址栏输入chrome://Version,然后按下回车键,找到个人资料路径一项. 2.接下来我们选中个人资料路径后面所有的信息,右键点击信息后选择“复 ...

  9. cookie路径概念理解

    .创建一个cookie并设置 cookie的有效路径: $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' }); 注:在默认情况下 ...

  10. Linux 系统命令行入门基础

    Linux 命令行组成结构 打包及压缩命令 tar 解压压缩包: