使用md5进行加密解密
使用方法已经在下面了,需要使用自己调用就可以了,一般用于cookie加密
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;/*** Created by Tony on 2017/9/20.*/
public class SecretUtils {private static final byte[] codes = new byte[256];static {for (int i = 0; i < 256; i++)codes[i] = -1;for (int i = 'A'; i <= 'Z'; i++)codes[i] = (byte) (i - 'A');for (int i = 'a'; i <= 'z'; i++)codes[i] = (byte) (26 + i - 'a');for (int i = '0'; i <= '9'; i++)codes[i] = (byte) (52 + i - '0');codes['+'] = 62;codes['/'] = 63;}private static final char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();/*** 字符串加密以及解密函数** @param $string(string) 原文或者密文* @param $operation(string) 操作(ENCODE | DECODE), 默认为 DECODE* @param $key (string) 密钥* @param $expiry(int) 密文有效期, 加密时候有效, 单位 秒,0 为永久有效* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文* @example* $a = authCode('abc', 'ENCODE', 'key');* $b = authCode($a, 'DECODE', 'key');//$b(abc)* $a = authCode('abc', 'ENCODE', 'key', 3600);* $b = authCode('abc', 'DECODE', 'key');//在一个小时内,$b(abc),否则 $b 为空*/private static String authCode(String $string, String $operation, String $key,int $expiry) {if($string != null && $operation.equals("DECODE")){int index =$string.indexOf(".");while (index!=-1){StringBuilder builder = new StringBuilder($string);String s = $string.substring(index,index+2);switch (s) {case ".0":builder.replace(index,index+2, " ");break;case ".1":builder.replace(index,index+2, "=");break;case ".2":builder.replace(index,index+2, "+");break;case ".3":builder.replace(index,index+2, "/");break;}$string = builder.toString();index =$string.indexOf(".");}}int $ckey_length = 4; //note 随机密钥长度 取值 0-32;//note 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。//note 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方//note 当此值为 0 时,则不产生随机密钥$key = md5( $key!=null ? $key : "123456");assert $key != null;String $keya = md5(substr($key, 0, 16));String $keyb = md5(substr($key, 16, 16));String $keyc;if ($operation.equals("DECODE")) {$keyc = substr(Objects.requireNonNull($string), 0, $ckey_length);} else {$keyc = substr(md5(microtime()), -$ckey_length);}String $cryptKey = $keya + md5( $keya + $keyc);int $key_length = $cryptKey.length();$string = $operation.equals("DECODE") ? base64_decode(substr($string, $ckey_length)) : sprintf($expiry>0 ? $expiry + time() : 0)+substr(Objects.requireNonNull(md5($string + $keyb)), 0, 16)+$string;int $string_length = $string.length();StringBuilder $result1 = new StringBuilder();int[] $box = new int[256];for(int i=0;i<256;i++){$box[i] = i;}int[] $rndKey = new int[256];for(int $i = 0; $i <= 255; $i++) {$rndKey[$i] = $cryptKey.charAt($i % $key_length);}int $j=0;for(int $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndKey[$i]) % 256;int $tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}$j=0;int $a=0;for(int $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;int $tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result1.append((char)( ((int)$string.charAt($i)) ^ ($box[($box[$a] + $box[$j]) % 256])));}if($operation.equals("DECODE")) {String $result = $result1.substring(0, $result1.length());if((Integer.parseInt(substr($result, 0, 10)) == 0 || Long.parseLong(substr($result, 0, 10)) - time() > 0) && substr($result, 10, 16).equals(substr(Objects.requireNonNull(md5(substr($result, 26) + $keyb)), 0, 16))) {return substr($result, 26);} else {return "";}} else {String str = $keyc+base64_encode($result1.toString());str = str.replaceAll(" ",".0");str = str.replaceAll("=",".1");str = str.replaceAll("\\+",".2");str = str.replaceAll("/",".3");return str;}}private static String md5(String input){MessageDigest md;try {md = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {return null;}return byte2hex(md.digest(input.getBytes()));}private static String md5(long input){return md5(String.valueOf(input));}private static String byte2hex(byte[] b) {StringBuilder hs = new StringBuilder();String stmp = "";for (byte value : b) {stmp = (Integer.toHexString(value & 0XFF));if (stmp.length() == 1)hs.append("0").append(stmp);elsehs.append(stmp);}return hs.toString();}private static String substr(String input,int begin, int length){return input.substring(begin, begin+length);}private static String substr(String input,int begin){if(begin>0){return input.substring(begin);}else{return input.substring(input.length()+ begin);}}private static long microtime(){return System.currentTimeMillis();}private static long time(){return System.currentTimeMillis()/1000;}private static String sprintf(long input){String temp = "0000000000"+input;return temp.substring(temp.length()-10);}private static String base64_decode(String input){try {return new String(decode(input.toCharArray()), StandardCharsets.ISO_8859_1);} catch (Exception e) {return e.getMessage();}}private static byte[] decode(char[] data) {int tempLen = data.length;for (char datum : data) {if ((datum > 255) || codes[datum] < 0)--tempLen;}int len = (tempLen / 4) * 3;if ((tempLen % 4) == 3)len += 2;if ((tempLen % 4) == 2)len += 1;byte[] out = new byte[len];int shift = 0;int accum = 0;int index = 0;for (char datum : data) {int value = (datum > 255) ? -1 : codes[datum];if (value >= 0) {accum <<= 6;shift += 6;accum |= value;if (shift >= 8) {shift -= 8;out[index++] = (byte) ((accum >> shift) & 0xff);}}}if (index != out.length) {throw new Error("Miscalculated data length (wrote " +index + " instead of " + out.length + ")");}return out;}private static String base64_encode(String input){try {return new String(encode(input.getBytes(StandardCharsets.ISO_8859_1)));} catch (Exception e) {return e.getMessage();}}private static char[] encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & data[i]);val <<= 8;if ((i + 1) < data.length) {val |= (0xFF & data[i + 1]);trip = true;}val <<= 8;if ((i + 2) < data.length) {val |= (0xFF & data[i + 2]);quad = true;}out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = alphabet[val & 0x3F];val >>= 6;out[index] = alphabet[val & 0x3F];}return out;}private static final String ENCODE = "ENCODE";private static final String DECODE = "DECODE";public static String expiryEncrypt(String $text,String $salt,Integer $expiry){return authCode($text,ENCODE,$salt,$expiry);}/*** @param $text 加密文本* @param $salt 加密密码* @return String*/public static String encrypt(String $text,String $salt){return expiryEncrypt($text, $salt,0);}public static String decrypt(String $encData,String $salt){return authCode($encData,DECODE,$salt,0);}
}
使用md5进行加密解密相关推荐
- md5在线加密解密是不是什么都能解密?为什么我的没有解出来呢?
网上有很多md5在线加解密站,熟悉网络安全或者IT技术的朋友可能会比较熟悉.MD5是一种加密技术方法.MD5的全称是Message-digest Algorithm 5,也称为信息摘要算法.主要是用于 ...
- php结合md5的加密解密,php结合md5的加密解密算法实例
本文实例讲述了php结合md5的加密解密算法.分享给大家供大家参考,具体如下: /* * Created on 2016-9-30 * */ function encrypt($data, $key) ...
- php结合md5的加密解密,php结合md5实现的加密解密方法
本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...
- php结合md5的加密解密,php结合md5实现的加密解密方法_PHP
本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...
- php结合md5的加密解密,php结合md5实现的加密解密方法,php结合md5加密解密_PHP教程...
php结合md5实现的加密解密方法,php结合md5加密解密 本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密 ...
- php结合md5的加密解密,php结合md5实现的加密解密方法_php技巧
本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...
- 使用MD5进行加密解密【代码实现】
目录 为什么需要加密? MD5加密测试 第一种加密方式 第二种加密方式 JUnit测试 为什么需要加密? 主要是保证网络传输数据的安全性. 我们的数据需要存储到前端,对于用户来说,不应该知道我们的敏感 ...
- 【MD5】加密/解密大小写问题
先看一段加密MD5的代码: REPORT ZTEST_MD5. DATA : XMS_STRING TYPE STRING,HASH TYPE HASH160. XMS_STRING = 'Bd123 ...
- Java MD5加密解密
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...
最新文章
- hdu1305Immediate Decodability(字典树)
- Codeforces Round #369 (Div. 2)
- rxjs里merge operators的用法
- [pytorch、学习] - 5.8 网络中的网络(NiN)
- windows server 2012 初安装体验
- centos mysql 升级 5.7_CentOS 7下升级MySQL5.7.23的一个坑
- css3新增了哪三种边框效果,怎么在CSS3中实现一个边框效果
- python生成json_python之生成多层json结构的实现
- 洛奇 服务器文件,【公告】电信三区服务器合并说明...
- webpack的分享
- 怎样去构建一个优质的Docker容器镜像
- 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
- netbeans使用教程
- 常用plc编程软件阵营划分
- 数据挖掘概念与技术(第三版)课后答案——第一章
- c语言程序调试时无法启动程序,编译没有异常,调试时报错: 无法启动程序“C:Projects\Driver\mydriver_check\HelloDDk.sys...
- 快速批量创建文件夹的方法
- 计算机专业人才需求调研背景,计算机专业人才需求调研报告
- 机器翻译和自动译后编辑
- RedHat7.6 配置yum源
热门文章
- 【不忘初心】 Windows11_22H2_22621.105_X64_可更新[纯净精简版][2.28G](2022.6.16)
- c语言常数-ox6a是什么意思,那年声明理解不了定义与初始化(三)
- 图的邻接表存储实现(第七章 P163)
- 1.10 企业首席信息官CIO及其职责
- 微信小程序 - 使用 uni-app 开发小程序以及部分功能实现
- 访问www.baidu.com的过程
- #创新应用#善听听书:进入听书的时代!
- 高精地图:激光雷达点云与高精地图融合
- 网线/双绞线上各标识CAT, AWG, PR, UTP/STP/FTP/SFTP的含义
- 实验 6 文件打包与解压缩