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

一文让你轻松了解JAVA开发中的四种加密方法1. md5加密工具类 2. base64加密工具类 3. Bcrypt工具类 1. MD5加密测试 2. base64加密测试 3. SHA加密测试 4. BCrypt加密测试

文章目录

一、工具类

  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 
	}
}

今天的文章一文让你轻松了解JAVA开发中的四种加密方法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20221.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注