一文让你轻松了解JAVA开发中的四种加密方法-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

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

文章目录

一、工具类

  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 Bcrypt(final String encryptSource) {
        String salt  = BCrypt.gensalt(SALT_SEED);
        Map bcryptResult = Bcrypt(salt, encryptSource);
        return bcryptResult;
    }
    /**
     * 
     * @param salt encrypt salt, Must conform to the rules 
     * @param encryptSource
     * @return
     */
    public static Map 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 bcryptResult = new HashMap();
        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 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 bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get("salt"),string);
        System.out.println(bcrypt2.get("SALT_KEY")); //null
        System.out.println(bcrypt2.get("CIPHER_KEY")); //null   
    }
}

分享文章:一文让你轻松了解JAVA开发中的四种加密方法
标题URL:http://kswsj.cn/article/gsssjh.html

其他资讯