1. 程式人生 > >訊息摘要演算法-SHA

訊息摘要演算法-SHA

SHA 安全雜湊演算法

雜湊演算法:雜湊是資訊的提煉,通常其長度要比資訊小很多,且為一個固定長度,加密性強的雜湊一定是不可逆的,這就意味著通過雜湊結果,無法推出任何部分的原始資訊,任何輸入資訊的變化,哪怕是一位,都將導致雜湊結果的明顯變化,雜湊還是防衝突的,即找不出具有相同雜湊結果的兩條資訊.具有這些特性的雜湊結果都可以用於資訊驗證是否被修改

     MD5:RSA資料安全公司開發的一種單項雜湊演算法(單項雜湊函式一般使用者與產生資訊摘要,金鑰加密等)

    SHA:可以對任意長度的資料運算生存160位的數值

    SHA1:基於MD4演算法,最安全的雜湊演算法之一

SHA1與MD5的區別:

1:對強行攻擊的安全性:SAH1摘要要比MD5摘要長32位,SHA1更加安全

2:速度上:SHA1的執行速度比MD5慢


除了圖上面的方式,依舊還有commons codec

關於commons codec的jar: commons-codec-1.10.jar  下載地址 參考

關於bouncy castle的jar: bcprov-ext-jdk15on-154.jar 下載地址 參考

jdk 方式SHA1

package com.example.encryption;

import org.apache.commons.codec.binary.Hex;

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

/**
 * @author xuanyouwu
 * @email 
[email protected]
* @time 2016-05-14 15:27 */ public class ShaTest {
    private static String SrcData = "xuanyouwu";

    public static void log(String s) {
        System.out.println("------>" + s);
    }

    public static void main(String[] args) throws Exception {
        log("jdk sha1:"+jdkSHA1(SrcData));
    }

    private static String jdkSHA1(String src) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA");
            return Hex.encodeHexString(messageDigest.digest(src.getBytes()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

執行結果:

------>jdk sha1:2a5c6fa5eebeef480dfc9cd911f679a4e86bc97c

commons codec方式生成sha1

package com.example.encryption;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;

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

/**
 * @author xuanyouwu
 * @email [email protected]
 * @time 2016-05-14 15:27
 */
public class ShaTest {

    private static String SrcData = "xuanyouwu";

    public static void log(String s) {
        System.out.println("------>" + s);
    }

    public static void main(String[] args) throws Exception {
        log("cc sha1:" + ccSHA1(SrcData));
    }

    private static String ccSHA1(String src) {
        MessageDigest sha1Digest = DigestUtils.getSha1Digest();
        byte[] digest = sha1Digest.digest(src.getBytes());
        return Hex.encodeHexString(digest);
    }
}

執行結果:

------>cc sha1:2a5c6fa5eebeef480dfc9cd911f679a4e86bc97c

同樣commons codec 還提供簡單的方式,使用DigestUtils

  public static String sha1Hex(String src) {
        return DigestUtils.sha1Hex(src.getBytes());
    }

bouncy castle方式生存SHA1

package com.example.encryption;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.digests.SHA1Digest;

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

/**
 * @author xuanyouwu
 * @email [email protected]
 * @time 2016-05-14 15:27
 */
public class ShaTest {

   
    private static String SrcData = "xuanyouwu";

    public static void log(String s) {
        System.out.println("------>" + s);
    }

    public static void main(String[] args) throws Exception {
        log("bc sha1:" + bcSHA1(SrcData));
    }

    private static String bcSHA1(String src)
    {
        SHA1Digest sha1Digest=new SHA1Digest();
        sha1Digest.update(src.getBytes(),0,src.getBytes().length);
        byte[] bytes=new byte[sha1Digest.getDigestSize()];
        sha1Digest.doFinal(bytes, 0);
        return org.bouncycastle.util.encoders.Hex.toHexString(bytes);
    }
}

執行結果:

------>bc sha1:2a5c6fa5eebeef480dfc9cd911f679a4e86bc97c

bouncy castle對SHA1的擴充套件

在其jar包中 org.bouncycastle.digests包下面

分別有SHA1Digest   SHA3Digest,SHA224Digest,SHA256Digest,SHA384Digest,SHA512Digest....很多實現,不一一演示,用法基本一致,只是摘要長度不一致,拿SHA224做演示:

package com.example.encryption;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.digests.SHA224Digest;

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

/**
 * @author xuanyouwu
 * @email [email protected]
 * @time 2016-05-14 15:27
 */
public class ShaTest {

    private static String SrcData = "xuanyouwu";

    public static void log(String s) {
        System.out.println("------>" + s);
    }

    public static void main(String[] args) throws Exception {
        log("bc sha1:" + bcSHA1(SrcData));
        log("bc sha224:" + bcSHA224(SrcData));
    }

    private static String bcSHA1(String src) {
        SHA1Digest sha1Digest = new SHA1Digest();
        sha1Digest.update(src.getBytes(), 0, src.getBytes().length);
        byte[] bytes = new byte[sha1Digest.getDigestSize()];
        sha1Digest.doFinal(bytes, 0);
        return org.bouncycastle.util.encoders.Hex.toHexString(bytes);
    }

    private static String bcSHA224(String src) {
        SHA224Digest sha224 = new SHA224Digest();
        sha224.update(src.getBytes(), 0, src.getBytes().length);
        byte[] bytes = new byte[sha224.getDigestSize()];
        sha224.doFinal(bytes, 0);
        return org.bouncycastle.util.encoders.Hex.toHexString(bytes);
    }
}

執行結果:

------>bc sha1:2a5c6fa5eebeef480dfc9cd911f679a4e86bc97c
------>bc sha224:2123aac1b225dd0379191e0495e7a0ebae85a464bfaebdfb47720789

可以看到SHA224比SHA1的摘要長很多

JDK 擴充套件SHA224 

由於jdk本身並未提供SHA224的實現,但是提供擴充套件,而bouncy castle就很好結合起來

package com.example.encryption;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.digests.SHA224Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

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

/**
 * @author xuanyouwu
 * @email [email protected]
 * @time 2016-05-14 15:27
 */
public class ShaTest {

    private static String SrcData = "xuanyouwu";

    public static void log(String s) {
        System.out.println("------>" + s);
    }

    public static void main(String[] args) throws Exception {
        log("jdk sha224:" + jdkSHA224(SrcData));
        log("jdk bc sha224:" + jdkSHA224WithBc(SrcData));
    }


    /**
     * 將發生異常
     *  java.security.NoSuchAlgorithmException: SHA224 MessageDigest not available
     * @param src
     * @return
     */
    public static String jdkSHA224(String src) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA224");
            md.update(src.getBytes());
            return Hex.encodeHexString(md.digest());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 擴充套件jdk 實現SHA224
    public static String jdkSHA224WithBc(String src) {
        try {
            Security.addProvider(new BouncyCastleProvider());
            MessageDigest md = MessageDigest.getInstance("SHA224");
            md.update(src.getBytes());
            return Hex.encodeHexString(md.digest());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

執行結果:

java.security.NoSuchAlgorithmException: SHA224 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:695)
at java.security.MessageDigest.getInstance(MessageDigest.java:167)
at com.example.encryption.ShaTest.jdkSHA224(ShaTest.java:74)
at com.example.encryption.ShaTest.main(ShaTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
------>jdk bc sha224:2123aac1b225dd0379191e0495e7a0ebae85a464bfaebdfb47720789

相關推薦

Java常用訊息摘要演算法-SHA

SHA是比較常用的訊息摘要演算法之一,其中比較常見的有SHA-1,SHA-256,SHA-512。這裡用Java程式碼實現一個簡單的工具類,可以提取字串或者檔案的SHA值。import java.io.File; import java.io.FileInputStream;

訊息摘要演算法-SHA

SHA 安全雜湊演算法 雜湊演算法:雜湊是資訊的提煉,通常其長度要比資訊小很多,且為一個固定長度,加密性強的雜湊一定是不可逆的,這就意味著通過雜湊結果,無法推出任何部分的原始資訊,任何輸入資訊的變化,哪怕是一位,都將導致雜湊結果的明顯變化,雜湊還是防衝突的,即找不出具有相同

MD(Message Digest ) 訊息摘要演算法SHA

      上一篇文章中介紹了基本的單向加密演算法 — — MD5,也大致的說了說它實現的原理。這篇文章繼續之前提到的單向加密,主要講的是 SHA,同 MD5 一樣,SHA 同樣也是一個系列,它包

MD、SHA、MAC訊息摘要演算法實現與應用

1.訊息摘要概述 訊息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一對應一個訊息或文字的固定長度的值,它由一個單向Hash加密函式對訊息進行作用而產生。如果訊息在途中改變了,則接收者通過對收到訊息的新產生的摘要與原摘要比較,就可知道訊息是否被改變了。因此訊息摘

java/訊息摘要演算法&數字簽名

一。訊息摘要演算法 常用摘要演算法:   以下 (HEX)內容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1。訊息摘要演算法MD5及MD族(MD2,MD4)  訊息摘要演算法應用: MD

訊息摘要演算法(慕課網視訊總結與知識梳理)

訊息摘要演算法分類: MD(Message Digetst):訊息摘要 SHA(Secure Hash Algorithm):安全雜湊 MAC(Message Authentication Code):訊息認證碼 以上演算法主要是用來驗證資料的完

Go語言實現單向雜湊函式 —— MD5訊息摘要演算法、SHA256與224(Go語言實現)

 MD5訊息摘要演算法 MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。 Go語言實現方式一: packag

Java實現訊息摘要演算法加密

訊息摘要演算法: MD(Message Digest) 訊息摘要 SHA(Secure Hash Algorithm) 安全雜湊 MAC(Message Authentication Code) 訊息認證碼 作用:(驗證資料完整性、數字簽名核心演算法) 將輸入的任意長度序列資

MD(Message Digest ) 訊息摘要演算法之MD5

1、訊息摘要的簡介      1.1訊息摘要的概念               唯一對應一個訊息或文字

HMAC-SHA1和MD5 訊息摘要演算法(java)

最近專案中需要對接支付,用到HMAC-SHA1和MD5兩種加密演算法,簡單回顧一下。 一、HMAC-SHA1  HMAC是金鑰相關的雜湊運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和

Message Digest Algorithm MD5(訊息摘要演算法第五版)簡單瞭解

Message Digest Algorithm MD5(訊息摘要演算法第五版)為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護。 該演算法的檔案號為RFC 1321(R.Rivest,MIT Laboratory for Computer Sc

Java加密系列之(三)訊息摘要演算法加密

訊息摘要演算法的分類 MD(Message Digest)訊息摘要 SHA(Secure Hash Algorithm)安全雜湊 MAC(Message Authentication Code)訊息認證碼 訊息摘要演算法的作用 訊息摘要演算法主要有以上3類,這3類演算法的

java訊息摘要演算法加密

訊息摘要演算法加密  訊息摘要演算法主要分為3類:MD(Message Digest)、SHA(Secure Hash Algorithm)、MAC(Message Authentication Code),以上3類演算法的主要作用是驗

安全體系(零)—— 加解密演算法訊息摘要訊息認證技術、數字簽名與公鑰證書

鋒影 email:[email protected] 如果你認為本系列文章對你有所幫助,請大家有錢的捧個錢場,點選此處贊助,贊助額0.1元起步,多少隨意 本文講解對稱加密、非對稱加密、訊息摘要、MAC、數字簽名、公鑰證書的用途、不足和解決的問題。 0.概

MD5演算法產生多少位的訊息摘要?

     在軟體開發的使用者註冊功能中常出現MD5加密這個概念,這個概念有一定的誤導性。嚴格來說:MD5還有sha-1、 RIPEMD以及Haval等不能算是加密演算法(雖然常用於把密碼變成“密文”),他們只是雜湊演算法,或者叫摘要演算法。加密對應解密這個概念,加密演算法包括:DES、3DES、IDEA、

.NET Core加解密實戰系列之——訊息摘要與數字簽名演算法

![](https://img2020.cnblogs.com/blog/2029875/202006/2029875-20200629172528304-1596961448.png) --- [TOC] ## 簡介 加解密現狀,編寫此係列文章的背景: - 需要考慮系統環境相容性問題(Linux、W

Google 最新的 Fuchsia OS【科技訊息摘要

http androi ria col 新的 案例 support tro use 轉自:http://www.cnblogs.com/pied/p/5771782.html 就是看到篇報道,有點好奇,就去FQ挖了點東西回來。 我似乎已開始就抓到了重點,沒錯,就是

python3__標準庫__hashlib模組__摘要演算法防篡改

1.hashlib基礎知識點 (1)hashlib提供了常用的摘要演算法:SHA1, SHA224, SHA256, SHA384, SHA512, MD5。 (2)摘要演算法:摘要演算法又稱為雜湊演算法、雜湊演算法。他通過一個函式,把任意長度的資料轉換成一個固定長度的資料串,

hashlib模組(摘要演算法,用於加密)

目錄 演算法介紹 加鹽 演算法介紹 Python的hashlib提供了常見的摘要演算法,如MD5,SHA1,SHA224, SHA256, SHA384, SHA512等演算法。 什麼是摘要演算法呢?摘要演算法又稱雜湊演算法、雜湊演算法。它通過一個函式,把任意長度的資料轉換為

MD5訊息摘要的java實現

今天這個程式就是從檔案中讀取訊息,使用MD5進行訊息摘要 直接上程式: package function; import java.util.*; import java.awt.*; import java.io.BufferedReader; import java.io.File; i