欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年05月22日 09:56:54   作者:西北野狼  
這篇文章主要介紹了Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法,文中通過示例代碼介紹的非常詳細,對大家的學(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算法這,得到的目標字節(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為下標從characters中取出對應(yīng)的十六進制字符
      char highChar = characters[high];

      //8.以low為下標從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算法這,得到的目標字節(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為下標從characters中取出對應(yīng)的十六進制字符
      char highChar = characters[high];

      //8.以low為下標從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)文章

  • Spring Security如何基于Authentication獲取用戶信息

    Spring Security如何基于Authentication獲取用戶信息

    這篇文章主要介紹了Spring Security如何基于Authentication獲取用戶信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 淺談JAVA 責任鏈模式

    淺談JAVA 責任鏈模式

    這篇文章主要介紹了JAVA 責任鏈模式的的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java鏈表(Linked List)基本原理與實現(xiàn)方法入門示例

    Java鏈表(Linked List)基本原理與實現(xiàn)方法入門示例

    這篇文章主要介紹了Java鏈表(Linked List)基本原理與實現(xiàn)方法,結(jié)合實例形式分析了Java鏈表(Linked List)的功能、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-03-03
  • SpringBoot整合Javamail實現(xiàn)郵件發(fā)送功能

    SpringBoot整合Javamail實現(xiàn)郵件發(fā)送功能

    郵件發(fā)送是一個很普遍的功能,springboot整合了相關(guān)的starter,本文給大家介紹了可以實現(xiàn)一個簡單的郵件發(fā)送功能的實例,文中通過代碼給大家介紹的非常詳細,感興趣的朋友可以參考下
    2023-12-12
  • Spring 數(shù)據(jù)庫連接池(JDBC)詳解

    Spring 數(shù)據(jù)庫連接池(JDBC)詳解

    本篇文章主要介紹了基于Spring的JDBC基本框架搭建;基于Spring的JDBC增刪改查;讀取配置文件中的數(shù)據(jù)等,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • 一篇文章帶你入門java泛型

    一篇文章帶你入門java泛型

    這篇文章主要介紹了java泛型基礎(chǔ)知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-08-08
  • Java超詳細講解設(shè)計模式之一的工廠模式

    Java超詳細講解設(shè)計模式之一的工廠模式

    工廠模式有 3 種不同的實現(xiàn)方式,分別是簡單工廠模式、工廠方法模式和抽象工廠模式,工廠模式最大的特點就是解耦合,本篇帶你詳細了解它
    2022-03-03
  • java中設(shè)計模式之適配器模式

    java中設(shè)計模式之適配器模式

    這篇文章主要介紹了java中設(shè)計模式之適配器模式的相關(guān)資料,適配器模式將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口。適配器讓原本不兼容的類可以合作得親密無間,需要的朋友可以參考下
    2017-09-09
  • Java棧和基礎(chǔ)隊列的實現(xiàn)詳解

    Java棧和基礎(chǔ)隊列的實現(xiàn)詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中的棧與隊列,在Java的時候,對于棧與隊列的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時候能夠有扎實的基礎(chǔ)能力。本文小編就來詳細說說Java中的棧與隊列,需要的朋友可以參考一下
    2022-02-02
  • 非常詳細的Java異常處理機制知識整理大全

    非常詳細的Java異常處理機制知識整理大全

    Java異常指在程序運行時可能出現(xiàn)的一些錯誤,比如試圖打開一個根本不存在的文件等,異常處理將會改變程序的控制流程,讓程序有機會對錯誤做出處理,下面這篇文章主要給大家介紹了關(guān)于Java異常處理機制知識整理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論