1.基本原理
(1)使用和函数作为可逆的加密和解密工作函数
(2)把出来的字符串通过某种方式进行分拆组成新的字符串实现加密
(3)把字符串通过逆向的分拆组成原来生成的出来的字符串,再用函数实现解密
2.具体实现
(1)需求java常用加密解密算法,用户登录后,需要把phone和存储到中,但是为了让中的数据更安全,如隐藏phone这个隐私信息,同时又方便服务器读取解密实现自动登录
(2)代码如下:
// phone为11位,password为md5加密后的32位字符串
$user_info = ['phone'=>12345678901, 'password'=>'1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikk'];
// 转为json字符串,可存入cookie,但有些信息可能会暴露
// -------------以下为加密方法----------------
$json = json_encode($user_info);
// {"phone":12345678901,"password":"1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikk"}
// 转为base64字符串
$b64 = base64_encode($json);
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==
// 长度为92,可以用"_"等字符补齐
$fade_b64 = $b64.'________';
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==________
// 把得到的字符串按10的长度分割为10份
$line_arr = [];
for($i = 0; $i < 10; $i++) {
$line_arr[] = substr($fade_b64, $i*10, 10);
}
// Array (
// [0] => eyJwaG9uZS |
// [1] => I6MTIzNDU2 |
// [2] => Nzg5MDEsIn |
// [3] => Bhc3N3b3Jk |
// [4] => IjoiMXFhej |
// [5] => J3c3gzZWRj |
// [6] => NHJmdjV0Z2 |
// [7] => I2eWhuN3Vq |
// [8] => bThpa2sifQ |
// [9] => ==________ V
// 先组装第一列eINBIJNIb=
// 以此类推
// )
// 对分割好的字符串进行重新组装
$sign = '';
for($i = 0; $i < 10; $i++) {
for($j = 0; $j < 10; $j++) {
$sign .= $line_arr[$j][$i];
}
}
// 得到最终的加密串
// eINBIJNIb=y6zhj3H2T=JMgcocJeh_wT53i3mWp_aIMNMgdha_GzD3Xzju2_9NEbFZVNs_uDs3hW03i_ZUIJeRZVf_S2nkjj2qQ_
// -------------以下为解密方法----------------
// 把字符串分为10为单位的10份
$line_arr = [];
for($i = 0; $i < 10; $i++) {
$line_arr[] = substr($sign, $i*10, 10);
}
//
// Array (
// [0] => eINBIJNIb= |
// [1] => y6zhj3H2T= |
// [2] => JMgcocJeh_ |
// [3] => wT53i3mWp_ |
// [4] => aIMNMgdha_ |
// [5] => GzD3Xzju2_ |
// [6] => 9NEbFZVNs_ |
// [7] => uDs3hW03i_ |
// [8] => ZUIJeRZVf_ |
// [9] => S2nkjj2qQ_ V
// 先组装第一列eyJwaG9uZS
// 以此类推
// )
//
$fade_b64 = '';
for($i = 0; $i < 10; $i++) {
for($j = 0; $j < 10; $j++) {
$fade_b64 .= $line_arr[$j][$i];
}
}
// 得到伪装过的b64字符串
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==________
$b64 = substr($fade_b64, 0, 92);
// 取出混淆字符串"_"
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==
$json = base64_decode($b64);
// 最终得到加密前的数据
3.应用场景
此种加密方法实现简单,可以把信息存储在像这种暴露出来的应用中
4.这只是想到的一种比较简单的可逆的加密解密方式,数据组装部分用了最简单的 “ 按列从上到下 ” 组装的方式,破解可能会比较容易,也可以用 " 按列从上到下,从下到上 " 混合、“ 对角线 ” 方法等,然后再加以字符的统一替换java常用加密解密算法,如 a 全部替换为 A 等替换法,可以使加密效果更好java常用加密解密算法 简易可逆加密解密算法,更不容易破解。最近用到了这种算法,与大家分享,当抛砖引玉了~用心,多动脑,就算是用php这种超级简单的语言,也可以做出厉害的东西!
文章来源:https://blog.csdn.net/phpspreader/article/details/53469481