可前端解密的加密方法探讨和str_replace和preg_replace分析
目的:
对字符串‘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分析的更多相关文章
- WebGIS中前端JS生成等值面方法探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博文<WebGIS中等值面展示的相关方案简析&g ...
- JavaScript加密解密7种方法总结分析
原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...
- JavaScript加密解密7种方法
注:本文纯转贴,供学习使用 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的javascript代码常常被别人轻易 ...
- 浅谈.NET中加密和解密的实现方法分享
这篇文章介绍了.NET中加密和解密的实现方法,有需要的朋友可以参考一下 .NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利.它将CryptoAPI改编进.NET的Syste ...
- 前端和后台对接时对sign加密方法
前端和后台对接时对sign加密方法 /*后台php对接进行sign标签加密 1 获取向后台请求的数据data(key/value方式),可以是个对象(obj),也可以是数组(arr); 2 将数据的k ...
- DES加密 java与.net可以相互加密解密两种方法
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
- iOS里常见的几种信息编码、加密方法简单总结
一.MD5 MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的 ...
- Java中常用的加密方法(JDK)
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...
- C# 加密总结 一些常见的加密方法
C# 加密总结 一些常见的加密方法 一 散列数据 代码如下: ? private static string CalculateSHA512Hash(string input) { ...
随机推荐
- from bs4 import BeautifulSoup 报错
一: BeautifulSoup的安装: 下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/4.6/ 下载后,解压缩,然后 ...
- JS 深拷贝和浅拷贝概念,以及实现深拷贝的三种方式
一.理解堆栈,基本数据类型与引用数据类型 1.堆栈 栈(stack):系统自动分配的内存空间,内存会由系统自动释放,用来存放函数的参数值,局部变量的值等,特点是先进后出. 堆(heap):系统动态分配 ...
- SDK安装详解以及adb的来源
首先,下载Android SDK Tools,翻过墙的朋友可以去Google Android的官网上下载(http://developer.android.com/sdk/index.html) 选择 ...
- [2017BUAA软工助教]个人项目测试结果
个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...
- 多线程系列之五:Balking 模式
一,什么是Balking模式 如果现在不合适执行这个操作,或者没必要执行这个操作,就停止处理,直接返回.在Balking模式中,如果守护条件不成立,就立即中断处理. 二,例子: 定期将当前数据内容写入 ...
- 微信开发 提示 Redirect_uri(错误10003)
情景: 搭建完成一个网站,使用微信打开链接地址,结果报错1003 完整的错误信息: 出现这种情况一般有两种原因: 1.没有配置网页授权 我们可以根据微信的开发者文档http://mp.weixin. ...
- Velocity中为什么要使用{}来明确标识变量
原因 比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这 个变量的后面紧接着显示name字符,则上面的标签 ...
- Laravel 的十八个最佳实践
本文翻译改编自 Laravel 的十八个最佳实践 这篇文章并不是什么由 Laravel 改编的 SOLID 原则.模式等. 只是为了让你注意你在现实生活的 Laravel 项目中最常忽略的内容. ...
- day 7-11 初识MySQL数据库及安装密码设置破解
一. 什么是数据库 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序所有的组件都运行在一 ...
- ABP实践学习
一.