最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Java 常用的 4 種加密方式(MD5+Base64+SHA+BCrypt)

 更新時(shí)間:2019年10月22日 15:22:05   作者:失控的的狗蛋~  
這篇文章主要介紹了Java 常用的 4 種加密方式(MD5+Base64+SHA+BCrypt),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、工具類(lèi)

 md5加密工具類(lèi) 

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

base64加密工具類(lèi)

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

 Bcrypt工具類(lèi)

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

二、加密測(cè)試

MD5加密測(cè)試 

/**
 * MD5加密
 */
public class MD5Test {
 public static void main(String[] args) {
 String string = "你好 世界";
 String byteArrayToHexString = MD5Utils.byteArrayToHexString(string.getBytes());
 System.out.println(byteArrayToHexString);//e68891e698afe4b880e58fa5e8af9d
 
 }
}

base64加密測(cè)試 

/**
 * 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);//你好 世界
 
 }
}

SHA加密測(cè)試 

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

BCrypt加密測(cè)試

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

總結(jié)

以上所述是小編給大家介紹的淺析Java 常用的 4 種加密方式(MD5+Base64+SHA+BCrypt),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • SpringBoot+EasyPoi實(shí)現(xiàn)excel導(dǎo)出功能

    SpringBoot+EasyPoi實(shí)現(xiàn)excel導(dǎo)出功能

    最新小編遇到這樣一個(gè)需求,根據(jù)檢索條件查詢列表并將結(jié)果導(dǎo)出到excel,實(shí)現(xiàn)過(guò)程也非常簡(jiǎn)單,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • Java中Servlet的生命周期詳解

    Java中Servlet的生命周期詳解

    這篇文章主要介紹了Java中Servlet的生命周期詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java:詳解Java中的異常

    Java:詳解Java中的異常

    這篇文章主要介紹了java中的異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java Filter過(guò)濾器的使用教程

    Java Filter過(guò)濾器的使用教程

    Filter也稱之為過(guò)濾器,它是Servlet技術(shù)中最實(shí)用的技術(shù),Web開(kāi)發(fā)人員通過(guò)Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能
    2023-01-01
  • Java線程的生命周期的詳解

    Java線程的生命周期的詳解

    這篇文章主要介紹了Java線程的生命周期的詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • springboot排除某些自動(dòng)配置的操作方法

    springboot排除某些自動(dòng)配置的操作方法

    Spring Boot 提供的自動(dòng)配置非常強(qiáng)大,某些情況下,自動(dòng)配置的功能可能不符合我們的需求,需要我們自定義配置,這個(gè)時(shí)候就需要排除/禁用Spring Boot 某些類(lèi)的自動(dòng)化配置了,本文給大家介紹springboot排除某些自動(dòng)配置的方法,感興趣的朋友一起看看吧
    2023-08-08
  • 簡(jiǎn)單實(shí)現(xiàn)java數(shù)獨(dú)游戲

    簡(jiǎn)單實(shí)現(xiàn)java數(shù)獨(dú)游戲

    這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)java數(shù)獨(dú)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 編輯器Ueditor和SpringBoot 的整合方法

    編輯器Ueditor和SpringBoot 的整合方法

    本文通過(guò)實(shí)例代碼給大家介紹了編輯器Ueditor和SpringBoot 的整合方法,需要的朋友參考下吧
    2017-08-08
  • Java實(shí)現(xiàn)把文件及文件夾壓縮成zip

    Java實(shí)現(xiàn)把文件及文件夾壓縮成zip

    這篇文章主要介紹了Java實(shí)現(xiàn)把文件及文件夾壓縮成zip,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java使用list集合remove需要注意的事項(xiàng)(使用示例)

    Java使用list集合remove需要注意的事項(xiàng)(使用示例)

    List集合的一個(gè)特點(diǎn)是它其中的元素是有序的,也就是說(shuō)元素的下標(biāo)是根據(jù)插入的順序來(lái)的,在刪除頭部或者中間的一個(gè)元素后,后面的元素下標(biāo)會(huì)往前移動(dòng),本文給大家介紹Java使用list集合remove需要注意的事項(xiàng),感興趣的朋友一起看看吧
    2022-01-01

最新評(píng)論

布拖县| 浙江省| 资中县| 丰镇市| 青神县| 祁连县| 通化市| 湖南省| 额济纳旗| 资中县| 宁化县| 彭州市| 探索| 扬州市| 龙川县| 连州市| 柞水县| 淳化县| 靖远县| 长治市| 广平县| 宣武区| 竹北市| 汽车| 上蔡县| 茂名市| 阳江市| 麦盖提县| 岫岩| 宁陕县| 浪卡子县| 宜兰县| 瑞金市| 齐齐哈尔市| 东方市| 新密市| 廊坊市| 莲花县| 吐鲁番市| 威宁| 房山区|