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

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

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

MessageDigest

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

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

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

舉個(gè)簡(jiǎn)單的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);

  }

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

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

    //在MD5算法這,得到的目標(biāo)字節(jié)數(shù)組的特點(diǎn):長(zhǎng)度固定為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的高四位的值
      //先把高四位通過(guò)右移操作拽到低四位
      int high = (b >> 4) & 15;

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

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

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

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

    return builder.toString();
  }
}

測(cè)試結(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() {
  }

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

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

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

    //在MD5算法這,得到的目標(biāo)字節(jié)數(shù)組的特點(diǎn):長(zhǎng)度固定為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的高四位的值
      //先把高四位通過(guò)右移操作拽到低四位
      int high = (b >> 4) & 15;

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

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

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

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

    return builder.toString();
  }

}

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

相關(guān)文章

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

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

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

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

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

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

    在現(xiàn)代的Java應(yīng)用開(kāi)發(fā)中,日志記錄是不可或缺的一部分,Spring Boot作為目前最流行的Java開(kāi)發(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)用,本文通過(guò)實(shí)例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring MVC整合 freemarker及使用方法

    Spring MVC整合 freemarker及使用方法

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

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

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

    idea導(dǎo)入springboot項(xiàng)目沒(méi)有maven的解決

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

    SpringBoot項(xiàng)目War包部署無(wú)法注冊(cè)到Nacos中的解決

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

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

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

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

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

最新評(píng)論

铜鼓县| 民丰县| 舞钢市| 许昌县| 祁连县| 宁安市| 秀山| 永定县| 衡阳县| 陇西县| 丘北县| 施秉县| 东莞市| 涪陵区| 丰城市| 平遥县| 个旧市| 惠州市| 浏阳市| 简阳市| 池州市| 黄平县| 乌兰浩特市| 朝阳县| 赤水市| 洞头县| 马关县| 晋中市| 炎陵县| 西贡区| 宿松县| 红原县| 麻阳| 新晃| 登封市| 建昌县| 平舆县| 兴和县| 宁波市| 嘉峪关市| 高邮市|