使用方法已经在下面了,需要使用自己调用就可以了,一般用于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进行加密解密相关推荐

  1. md5在线加密解密是不是什么都能解密?为什么我的没有解出来呢?

    网上有很多md5在线加解密站,熟悉网络安全或者IT技术的朋友可能会比较熟悉.MD5是一种加密技术方法.MD5的全称是Message-digest Algorithm 5,也称为信息摘要算法.主要是用于 ...

  2. php结合md5的加密解密,php结合md5的加密解密算法实例

    本文实例讲述了php结合md5的加密解密算法.分享给大家供大家参考,具体如下: /* * Created on 2016-9-30 * */ function encrypt($data, $key) ...

  3. php结合md5的加密解密,php结合md5实现的加密解密方法

    本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...

  4. php结合md5的加密解密,php结合md5实现的加密解密方法_PHP

    本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...

  5. php结合md5的加密解密,php结合md5实现的加密解密方法,php结合md5加密解密_PHP教程...

    php结合md5实现的加密解密方法,php结合md5加密解密 本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密 ...

  6. php结合md5的加密解密,php结合md5实现的加密解密方法_php技巧

    本文实例讲述了php结合md5实现的加密解密方法.分享给大家供大家参考,具体如下: 最近在整理代码发现了一个不错的东西,结合md5的加解密算法.网上关于php结合md5的加密,解密算法比较少的,其实p ...

  7. 使用MD5进行加密解密【代码实现】

    目录 为什么需要加密? MD5加密测试 第一种加密方式 第二种加密方式 JUnit测试 为什么需要加密? 主要是保证网络传输数据的安全性. 我们的数据需要存储到前端,对于用户来说,不应该知道我们的敏感 ...

  8. 【MD5】加密/解密大小写问题

    先看一段加密MD5的代码: REPORT ZTEST_MD5. DATA : XMS_STRING TYPE STRING,HASH TYPE HASH160. XMS_STRING = 'Bd123 ...

  9. Java MD5加密解密

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...

最新文章

  1. hdu1305Immediate Decodability(字典树)
  2. Codeforces Round #369 (Div. 2)
  3. rxjs里merge operators的用法
  4. [pytorch、学习] - 5.8 网络中的网络(NiN)
  5. windows server 2012 初安装体验
  6. centos mysql 升级 5.7_CentOS 7下升级MySQL5.7.23的一个坑
  7. css3新增了哪三种边框效果,怎么在CSS3中实现一个边框效果
  8. python生成json_python之生成多层json结构的实现
  9. 洛奇 服务器文件,【公告】电信三区服务器合并说明...
  10. webpack的分享
  11. 怎样去构建一个优质的Docker容器镜像
  12. 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
  13. netbeans使用教程
  14. 常用plc编程软件阵营划分
  15. 数据挖掘概念与技术(第三版)课后答案——第一章
  16. c语言程序调试时无法启动程序,编译没有异常,调试时报错: 无法启动程序“C:Projects\Driver\mydriver_check\HelloDDk.sys...
  17. 快速批量创建文件夹的方法
  18. 计算机专业人才需求调研背景,计算机专业人才需求调研报告
  19. 机器翻译和自动译后编辑
  20. RedHat7.6 配置yum源

热门文章

  1. 【不忘初心】 Windows11_22H2_22621.105_X64_可更新[纯净精简版][2.28G](2022.6.16)
  2. c语言常数-ox6a是什么意思,那年声明理解不了定义与初始化(三)
  3. 图的邻接表存储实现(第七章 P163)
  4. 1.10 企业首席信息官CIO及其职责
  5. 微信小程序 - 使用 uni-app 开发小程序以及部分功能实现
  6. 访问www.baidu.com的过程
  7. #创新应用#善听听书:进入听书的时代!
  8. 高精地图:激光雷达点云与高精地图融合
  9. 网线/双绞线上各标识CAT, AWG, PR, UTP/STP/FTP/SFTP的含义
  10. 实验 6 文件打包与解压缩