《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 「爱编程的浪子」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一、工具类

  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 seed
private static final int SALT_SEED = 12;
// the head fo salt
private 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);//5oiR5piv5LiA5Liq5a2X56ym5Liy
System.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")); //null
System.out.println(bcrypt2.get("CIPHER_KEY")); //null
}
}
文章目录
  1. 1. 一、工具类
  2. 2. 二、加密测试
  3. 3. 一、工具类
    1. 3.0.1. 1. md5加密工具类
    2. 3.0.2. 2. base64加密工具类
    3. 3.0.3. 3. Bcrypt工具类
  • 4. 二、加密测试
    1. 4.0.1. 1. MD5加密测试
    2. 4.0.2. 2. base64加密测试
    3. 4.0.3. 3. SHA加密测试
    4. 4.0.4. 4. BCrypt加密测试