一、工具类

  1. md5加密工具类

  2. base64加密工具类

  3. Bcrypt工具类

二、加密测试

  1. MD5加密测试

  2. base64加密测试

  3. SHA加密测试

  4. BCrypt加密测试

一、工具类

1. md5加密工具类

package 加密Tester.util;
import java.security.MessageDigest;public class MD5Utils {private static final String hexDigIts[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};/*** MD5加密* @param origin 字符* @param charsetname 编码* @return*/public static String MD5Encode(String origin, String charsetname){String resultString = null;try{resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");if(null == charsetname || "".equals(charsetname)){resultString = byteArrayToHexString(md.digest(resultString.getBytes()));}else{resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));}}catch (Exception e){}return resultString;}public static String byteArrayToHexString(byte b[]){StringBuffer resultSb = new StringBuffer();for(int i = 0; i < b.length; i++){resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}public static String byteToHexString(byte b){int n = b;if(n < 0){n += 256;}int d1 = n / 16;int d2 = n % 16;return hexDigIts[d1] + hexDigIts[d2];}}

2. base64加密工具类

package 加密Tester.util;
import org.apache.commons.codec.binary.Base64;
import java.io.UnsupportedEncodingException;public class Base64Util {// 字符串编码private static final String UTF_8 = "UTF-8";/*** 加密字符串* @param inputData* @return*/public static String decodeData(String inputData) {try {if (null == inputData) {return null;}return new String(Base64.decodeBase64(inputData.getBytes(UTF_8)), UTF_8);} catch (UnsupportedEncodingException e) {}return null;}/*** 解密加密后的字符串* @param inputData* @return*/public static String encodeData(String inputData) {try {if (null == inputData) {return null;}return new String(Base64.encodeBase64(inputData.getBytes(UTF_8)), UTF_8);} catch (UnsupportedEncodingException e) {}return null;}public static void main(String[] args) {System.out.println(Base64Util.encodeData("我是中文"));String enStr = Base64Util.encodeData("我是中文");System.out.println(Base64Util.decodeData(enStr));}
}

3. Bcrypt工具类

package 加密Tester.util;
import java.util.HashMap;
import java.util.Map;import org.apache.commons.lang3.StringUtils;
import org.mindrot.bcrypt.BCrypt;public class BcryptCipher {// generate salt seedprivate static final int SALT_SEED = 12;// the head fo saltprivate static final String SALT_STARTSWITH = "$2a$12";public static final String SALT_KEY = "salt";public static final String CIPHER_KEY = "cipher";/*** Bcrypt encryption algorithm method* @param encryptSource*                  need to encrypt the string* @return Map , two values in Map , salt and cipher*/public static Map<String, String> Bcrypt(final String encryptSource) {String salt  = BCrypt.gensalt(SALT_SEED);Map<String, String> bcryptResult = Bcrypt(salt, encryptSource);return bcryptResult;}/**** @param salt encrypt salt, Must conform to the rules* @param encryptSource* @return*/public static Map<String, String> Bcrypt(final String salt, final String encryptSource) {if (StringUtils.isBlank(encryptSource)) {throw new RuntimeException("Bcrypt encrypt input params can not be empty");}if (StringUtils.isBlank(salt) || salt.length() != 29) {throw new RuntimeException("Salt can't be empty and length must be to 29");}if (!salt.startsWith(SALT_STARTSWITH)) {throw new RuntimeException("Invalid salt version, salt version is $2a$12");}String cipher = BCrypt.hashpw(encryptSource, salt);Map<String, String> bcryptResult = new HashMap<String, String>();bcryptResult.put(SALT_KEY, salt);bcryptResult.put(CIPHER_KEY, cipher);return bcryptResult;}}

二、加密测试

1. MD5加密测试

package 加密Tester;import 加密Tester.util.MD5Utils;/*** MD5加密*/
public class MD5Test {public static void main(String[] args) {String string = "我是一句话";String byteArrayToHexString = MD5Utils.byteArrayToHexString(string.getBytes());System.out.println(byteArrayToHexString);//e68891e698afe4b880e58fa5e8af9d}
}

2. base64加密测试

package 加密Tester;import java.util.Base64;import 加密Tester.util.Base64Util;/*** base64加密*/
public class Bast64Tester {public static void main(String[] args) {String string = "我是一个字符串";String encodeData = Base64Util.encodeData(string); //加密String decodeData = Base64Util.decodeData(encodeData); //解密System.out.println(encodeData);//5oiR5piv5LiA5Liq5a2X56ym5LiySystem.out.println(decodeData);//我是一个字符串}}

3. SHA加密测试

package 加密Tester;import org.apache.commons.codec.digest.Sha2Crypt;/*** SHA加密*/
public class ShaTest {public static void main(String[] args) {String string = "我是一句话";String sha256Crypt = Sha2Crypt.sha256Crypt(string.getBytes());System.out.println(sha256Crypt);//$5$AFoQTeyt$TiqmobvcQXjXaAQMYosAAO4KI8LfigZMGHzq.Dlp4NC}
}

4. BCrypt加密测试

package 加密Tester;import java.security.SecureRandom;
import java.util.Map;
import java.util.UUID;import 加密Tester.util.BcryptCipher;
import 加密Tester.util.MD5Utils;/*** BCrypt加密*/
public class BCryptTest {public static void main(String[] args) {String string = "我是一句话";Map<String, String> bcrypt = BcryptCipher.Bcrypt(string);System.out.println(bcrypt.keySet()); //[cipher, salt]System.out.println(bcrypt.get("cipher")); //$2a$12$ylb92Z84gqlrSfzIztlCV.dK0xNbw.pOv3UwXXA76llOsNRTJsE/.System.out.println(bcrypt.get("salt")); //$2a$12$ylb92Z84gqlrSfzIztlCV.Map<String, String> bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get("salt"),string);System.out.println(bcrypt2.get("SALT_KEY")); //nullSystem.out.println(bcrypt2.get("CIPHER_KEY")); //null}
}

一文让你轻松了解 JAVA 开发中的四种加密方法相关推荐

  1. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  2. 【java】java开发中的23种设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  3. Word文档的四种加密方法

    word文件大家都很熟悉,文件加密方式也有很多种,今天和大家分享四种word文档的加密方式: 第一种:打开密码 给word文档设置打开密码,可以保护word文档不被人查看,只有在打开word文件的时候 ...

  4. Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象,也就是说只有属性和setter和getter方法.使用Hibernate来生成PO是不错的 ...

  5. Java开发中的23种设计模式详解

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  6. java百度地图路线规划_浅谈百度地图WEB开发中的四种路线规划

    百度地图在3.0的Javascript api中增加了四种路径规划,分别是:步行.骑行.自驾.公交. 关于路线规划的引用也相当简单,我们以步行为例://实例化地图 var map = new BMap ...

  7. 简述程序开发中的常用的加密方法

    1.对称加密 加密和解密过程使用相同的秘钥 在网络传输中, A节点向B节点传数据,在数据传输之前,先使用一个秘钥在A节点上进行加密,当数据传输到B节点时,使用相同的秘钥进行解密才能获取到原始数据.这个 ...

  8. Java开发中更多常见的危险信号

    在< Java开发中的常见危险信号>一文中,我研究了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题. 这些"红色标记"类似于"代码气味&q ...

  9. Java开发中的常见危险信号

    在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码问题. 我不是在谈论总是错误的 ...

最新文章

  1. iOS经典讲解之获取沙盒文件路径写入和读取简单对象
  2. 从传统到深度学习:浅谈点云分割中的图结构
  3. 单片机中SDZ是什么意思_合泰单片机ADC转换程序
  4. 推送通知_手机总是收到烦人的推送,教你几招,彻底摆脱无用通知
  5. 深度学习(三)theano学习笔记(2)基础函数-未完待续
  6. 阿里云分布式容器平台即将全面启动公测
  7. URAL 1036 Lucky Tickets
  8. 系统--把系统BIOS中将光驱设置为第一启动盘
  9. python中对两个 list 求交集,并集和差集
  10. asp.net中GridView多行表头导出Excel表头显示不全问题解决方法
  11. 布丰投针java实现,MATLAB模拟布丰投针实验
  12. C++list容器实现按照年龄升序排列,年龄相同按照身高降序排列,年龄身高相同对体重升序排列
  13. 简单测试.NET开源的PDF文档生成器QuestPDF
  14. win pxe安装linux,windows系统架设PXE+TFTP+HTTP安装CentOS 4.7 体验
  15. 【项目管理】干系人管理
  16. 【前端优化】第三方字体优化方案大全
  17. windows下制作macos安装u盘_制作MacOS系统启动盘教程以及安装教程
  18. Clinical Chemistry | 张建中/徐健开发幽门螺杆菌单细胞精准诊疗技术
  19. java 好和不好的形容词 英语怎么说_为什么很多人译不好“It+is+a+形容词+名词+that从句”?...
  20. 视频转动漫软件有哪些?小编亲测6款工具,1秒穿越漫画场景

热门文章

  1. Docker 网络之进阶篇
  2. Solr7 安装部署 管理界面介绍
  3. 多种方式读取文件内容
  4. cpu进程调度---RT Throttling【转】
  5. linux 记一次链路聚合
  6. C# 6.0的字典(Dictionary)的语法
  7. 2013年第四季度总结报告
  8. 转贴:BMP格式详解 二 (转载)
  9. 人生失败的31种致命原因
  10. C#中 ??、 ?、 ?: 、?.、?[ ] 问号