可前端解密的加密方法探讨和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) { ...
随机推荐
- Mergeable Stack(链表实现栈)
C - Mergeable Stack ZOJ - 4016 一开始用stl中内置的栈来写,其中第三个操作,我先复制到一个数组,再将其倒给另一个栈 这个方法有两个错误的地方: 1.栈在内存很大需要扩容 ...
- python获取当前日期时间
转载自:https://www.cnblogs.com/wenBlog/p/6023742.html 在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函 ...
- C语言之运算符、表达式和语句
#include<stdio.h> #define ADJUST 7.31 int main(void) { const double SCALE = 0.333; double shoe ...
- java中流的简单小结
1.分类 按字节流分: InputStream(输出流) OutputStream(输入流) 按字符流分: Reader Writer 提示:输入.输出是站在程序的角度而言,所有输入流是“读 ...
- 并发包学习之-atomic包
一,模拟并发代码: 线程不安全的代码 //并发模拟代码 public class CountExample { //请求总数 public static int clientTotal = 5000; ...
- jQuery实现Ajax请求时,页面显示等待的效果,超过指定请求时间后,进行其他操作
背景:有一个按钮,点击之后向后端程序发起Ajax请求,在请求结果没有返回之前,页面显示等待的效果,此时仍旧是异步请求,等待的效果在接收到结果后撤销. 需求:因为网络延迟或者后端程序的问题,在发起Aja ...
- HTTPS的SSL证书配置
SSL证书 TOMCAT7.0部署_百度经验https://jingyan.baidu.com/article/7082dc1c65066be40a89bda8.html SSL证书安装指引 - 青春 ...
- ShowDoc上手
ShowDoc是什么 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! 程序员都很希望别人能写技术文档,而自己却 ...
- IdentityServer4【QuickStart】之设置和概述
设置和概述 有两个基本的方式来开启一个新的IdentityServer项目: 从头开始 从asp.net Identity模板开始 如果你从头开始,我们提供了一些基于内存中构建的存储,所以你不必一开始 ...
- [转帖]Ipvsadm参数详解(常用命令)
Ipvsadm参数详解(常用命令) 2013年11月29日 12:41:40 怀素1980 阅读数:15901 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...