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

Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法

 更新時間:2020年05月22日 09:56:54   作者:西北野狼  
這篇文章主要介紹了Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

MessageDigest

MessageDigest 類為應(yīng)用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),輸出固定長度的哈希值。

MessageDigest 對象開始被初始化。該對象通過使用 update 方法處理數(shù)據(jù)。任何時候都可以調(diào)用 reset 方法重置摘要。一旦所有需要更新的數(shù)據(jù)都已經(jīng)被更新了,應(yīng)該調(diào)用 digest 方法之一完成哈希計算。

對于給定數(shù)量的更新數(shù)據(jù),digest 方法只能被調(diào)用一次。digest 被調(diào)用后,MessageDigest 對象被重新設(shè)置成其初始狀態(tài)。

舉個簡單的md5加密的例子:

package com.company;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MessageDigestTest {

  public static void main(String[] args) throws NoSuchAlgorithmException {

    String source = "123123";
    String md5Str = getMd5(source);


    System.out.println(md5Str);

  }

  /**
   * 通過md5進行加密
   * @param source 要加密的數(shù)據(jù)
   * @return
   * @throws NoSuchAlgorithmException
   */
  private static String getMd5(String source) throws NoSuchAlgorithmException {
    //1.獲取MessageDigest對象
    MessageDigest digest = MessageDigest.getInstance("md5");

    //2.執(zhí)行加密操作
    byte[] bytes = source.getBytes();

    //在MD5算法這,得到的目標(biāo)字節(jié)數(shù)組的特點:長度固定為16
    byte[] targetBytes = digest.digest(bytes);

    //3.聲明字符數(shù)組
    char [] characters = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    //4.遍歷targetBytes
    StringBuilder builder = new StringBuilder();
    for (byte b : targetBytes) {
      //5.取出b的高四位的值
      //先把高四位通過右移操作拽到低四位
      int high = (b >> 4) & 15;

      //6.取出b的低四位的值
      int low = b & 15;

      //7.以high為下標(biāo)從characters中取出對應(yīng)的十六進制字符
      char highChar = characters[high];

      //8.以low為下標(biāo)從characters中取出對應(yīng)的十六進制字符
      char lowChar = characters[low];

      builder.append(highChar).append(lowChar);
    }

    return builder.toString();
  }
}

測試結(jié)果:

4297F44B13955235245B2497399D7A93

封裝成工具類:

package com.company;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Tool {
  private static ThreadLocal<MD5Tool> md5ToolThreadLocal = new ThreadLocal<>();

  private MD5Tool() {
  }

  /**
   * 獲取一個MD5工具實例
   */
  public static MD5Tool getInstance() {
    if (md5ToolThreadLocal.get() == null) {
      md5ToolThreadLocal.set(new MD5Tool());
    }
    return md5ToolThreadLocal.get();
  }

  /**
   * 通過md5進行加密
   *
   * @param source 要加密的數(shù)據(jù)
   * @return
   * @throws NoSuchAlgorithmException
   */
  public String getMd5(String source) throws NoSuchAlgorithmException {
    //1.獲取MessageDigest對象
    MessageDigest digest = MessageDigest.getInstance("md5");

    //2.執(zhí)行加密操作
    byte[] bytes = source.getBytes();

    //在MD5算法這,得到的目標(biāo)字節(jié)數(shù)組的特點:長度固定為16
    byte[] targetBytes = digest.digest(bytes);

    //3.聲明字符數(shù)組
    char[] characters = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    //4.遍歷targetBytes
    StringBuilder builder = new StringBuilder();
    for (byte b : targetBytes) {
      //5.取出b的高四位的值
      //先把高四位通過右移操作拽到低四位
      int high = (b >> 4) & 15;

      //6.取出b的低四位的值
      int low = b & 15;

      //7.以high為下標(biāo)從characters中取出對應(yīng)的十六進制字符
      char highChar = characters[high];

      //8.以low為下標(biāo)從characters中取出對應(yīng)的十六進制字符
      char lowChar = characters[low];

      builder.append(highChar).append(lowChar);
    }

    return builder.toString();
  }

}

到此這篇關(guān)于Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法的文章就介紹到這了,更多相關(guān)MessageDigest 數(shù)據(jù)加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java將文件轉(zhuǎn)成流文件返回給前端詳細(xì)代碼實例

    java將文件轉(zhuǎn)成流文件返回給前端詳細(xì)代碼實例

    Java編程語言提供了強大的文件處理和壓縮能力,下面這篇文章主要給大家介紹了關(guān)于java將文件轉(zhuǎn)成流文件返回給前端的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • java實現(xiàn)計算周期性提醒的示例

    java實現(xiàn)計算周期性提醒的示例

    本文分享一個java實現(xiàn)計算周期性提醒的示例,可以計算父親節(jié)、母親節(jié)這樣的節(jié)日,也可以定義如每月最好一個周五,以方便安排會議
    2014-04-04
  • SpringBoot整合Logback日志框架及高并發(fā)下的性能優(yōu)化

    SpringBoot整合Logback日志框架及高并發(fā)下的性能優(yōu)化

    在現(xiàn)代的Java應(yīng)用開發(fā)中,日志記錄是不可或缺的一部分,Spring Boot作為目前最流行的Java開發(fā)框架之一,默認(rèn)集成了Logback作為日志框架,Logback是Log4j的繼任者,具有更高的性能和更豐富的功能,本文將詳細(xì)介紹如何在Spring Boot中整合Logback日志框架
    2025-03-03
  • 使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    這篇文章主要介紹了用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用,本文通過實例代碼詳解給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Spring MVC整合 freemarker及使用方法

    Spring MVC整合 freemarker及使用方法

    Spring MVC是一種基于Java的實現(xiàn)了Web MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架,這篇文章主要介紹了Spring MVC整合 freemarker及使用方法,需要的朋友可以參考下
    2019-07-07
  • 淺談一下Java多線程斷點復(fù)制

    淺談一下Java多線程斷點復(fù)制

    這篇文章主要介紹了淺談一下Java多線程斷點復(fù)制,當(dāng)程序執(zhí)行中斷時(出現(xiàn)錯誤、斷電關(guān)機),仍可以從上次復(fù)制過程中重新開始(不必從頭開始復(fù)制),需要的朋友可以參考下
    2023-04-04
  • idea導(dǎo)入springboot項目沒有maven的解決

    idea導(dǎo)入springboot項目沒有maven的解決

    這篇文章主要介紹了idea導(dǎo)入springboot項目沒有maven的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot項目War包部署無法注冊到Nacos中的解決

    SpringBoot項目War包部署無法注冊到Nacos中的解決

    這篇文章主要介紹了SpringBoot項目War包部署無法注冊到Nacos中的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot與vue詳解實現(xiàn)短信發(fā)送流程

    springboot與vue詳解實現(xiàn)短信發(fā)送流程

    隨著人工智能的不斷發(fā)展,機器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機器學(xué)習(xí),本文就介紹了機器學(xué)習(xí)的基礎(chǔ)內(nèi)容
    2022-06-06
  • java簡易文本分割器實現(xiàn)代碼

    java簡易文本分割器實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java簡易文本分割器的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

桦甸市| 五常市| 德钦县| 浦江县| 东平县| 祁门县| 惠安县| 九江县| 肥东县| 榆社县| 精河县| 揭阳市| 嵊泗县| 克东县| 宜川县| 广东省| 山东省| 喀喇沁旗| 宝坻区| 措美县| 武穴市| 金湖县| 房产| 两当县| 丰都县| 扎赉特旗| 镇远县| 岱山县| 察雅县| 富阳市| 榕江县| 健康| 长春市| 崇州市| 大城县| 洪江市| 丁青县| 安国市| 仙居县| 宜城市| 会东县|