Java 開發中常用的 4 種加密方法

一、工具類

  1. md5加密工具類

  2. base64加密工具類

  3. Bcrypt工具類
    二、加密測試

  4. MD5加密測試

  5. base64加密測試

  6. SHA加密測試

  7. BCrypt加密測試
    一、工具類

  8. md5加密工具類

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加密工具類

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工具類

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加密測試

/**

  • 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加密測試

/**

  • 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加密測試

/**

  • 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加密測試

/**

  • 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

}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章