Java摘要

概念


  • 它是一個唯一對應一個消息或文本的固定長度的值,它由一個單向Hash加密函數對消息進行作用而產生。
  • 如果消息在途中改變了,則接收者通過對收到消息的新產生的摘要與原摘要比較,就可知道消息是否被改變了。因此消息摘要保證了消息的完整性。
  • 消息摘要採用單向Hash 函數將需加密的明文”摘要”成一串密文,這一串密文亦稱爲數字指紋(Finger Print),它有固定的長度,且不同的明文摘要成密文,其結果總是不同的,而同樣的明文其摘要必定一致。這樣這串摘要便可成爲驗證明文是否是”真身”的”指紋”了
  • 摘要的目的:防止報文被篡改,並且驗證消息交互方的身份
  • 摘要是單向加密

算法


MD5
SHA1

生成摘要


MD5
/**
 * 純算法摘要 。 拼接上約定密鑰。
 */
public void digest() {
   try {
      // 加上約定的密鑰進行摘要
      byte[] plain = plaintext.getBytes("UTF-8");

      // 1、獲取實例,指定算法
      MessageDigest md = MessageDigest.getInstance(algorithmMD5);
      // MessageDigest md = MessageDigest.getInstance(algorithmSHA);
      // 2、摘要
      md.update(plain);
      byte[] digest = md.digest();
      // byte[] digest = md.digest(plain);

      // 由於摘要hash算法是對字節二進制進行散列的,所以直接轉成string是會出現亂碼。要麼轉成Base64碼,也可以轉成16進制碼顯示
      // String digestText = BytesHexConverter.bytesToHexString(digest);
      String digestText = Base64.encode(digest);
      System.out.println(digestText);
   } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
   } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
   }
}

在這裏插入圖片描述

SHA1
public void digest() {
   try {
      // 加上約定的密鑰進行摘要
      byte[] plain = plaintext.getBytes("UTF-8");

      // 1、獲取實例,指定算法
      // MessageDigest md = MessageDigest.getInstance(algorithmMD5);
      MessageDigest md = MessageDigest.getInstance(algorithmSHA);
      // 2、摘要
      md.update(plain);
      byte[] digest = md.digest();
      // byte[] digest = md.digest(plain);

      // 由於摘要hash算法是對字節二進制進行散列的,所以直接轉成string是會出現亂碼。要麼轉成Base64碼,也可以轉成16進制碼顯示
      // String digestText = BytesHexConverter.bytesToHexString(digest);
      String digestText = Base64.encode(digest);
      System.out.println(digestText);
   } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
   } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
   }
}

在這裏插入圖片描述

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