成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

慕課網(wǎng)_《Java實(shí)現(xiàn)消息摘要算法加密》學(xué)習(xí)總結(jié)

zengdongbao / 2748人閱讀

時(shí)間:2017年4月10日星期一
說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學(xué)示例源碼:https://github.com/zccodere/s...
個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s...

第一章:概述 1-1 Java實(shí)現(xiàn)消息摘要算法加密

消息摘要算法

MD(Message Digest)
SHA(Secure Hash Algorithm)
MAC(Message Authentication Code)
驗(yàn)證數(shù)據(jù)完整性
數(shù)字簽名核心算法
第二章:消息摘要算法MD 2-1 MD算法概述

消息摘要算法:MD

MD5
MD家族(128位摘要信息)
--MD2、MD4
特點(diǎn)

算法實(shí)現(xiàn):

2-2 MD算法實(shí)現(xiàn)

代碼演示:

package com.myimooc.security.md;

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

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

/**
 * MD消息摘要加密演示
 * Created by ZC on 2017/4/10.
 */
public class DemoMD {

    /** 待加密字符串 */
    private static String src="imooc security md";

    public static void main(String[] args){
        jdkMD5();
        jdkMD2();
        bcMD4();
        bcMD5();
        ccMD5();
        ccMD2();
    }

    /**
     * 通過(guò) jdk 實(shí)現(xiàn)MD5加密
     */
    public static void jdkMD5(){
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = md.digest(src.getBytes());
            System.out.println("JDK MD5:"+Hex.encodeHexString(md5Bytes));

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過(guò) jdk 實(shí)現(xiàn)MD2加密
     */
    public static void jdkMD2(){
        try {
            MessageDigest md = MessageDigest.getInstance("MD2");
            byte[] md2Bytes = md.digest(src.getBytes());
            System.out.println("JDK MD2:"+Hex.encodeHexString(md2Bytes));

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過(guò) bouncy castle 實(shí)現(xiàn)MD5加密
     */
    public static void bcMD5(){
        Digest digest = new MD5Digest();
        digest.update(src.getBytes(),0,src.getBytes().length);
        byte[] md5Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(md5Bytes,0);
        System.out.println("BC MD5:"+org.bouncycastle.util.encoders.Hex.toHexString(md5Bytes));
    }

    /**
     * 通過(guò) bouncy castle 實(shí)現(xiàn)MD4加密
     */
    public static void bcMD4(){
        try {
            Security.addProvider(new BouncyCastleProvider());
            MessageDigest md = MessageDigest.getInstance("MD4");
            byte[] md5Bytes = md.digest(src.getBytes());
            System.out.println("BC MD4:"+org.bouncycastle.util.encoders.Hex.toHexString(md5Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過(guò) commons codec 實(shí)現(xiàn)MD5加密
     */
    public static void ccMD5(){
        System.out.println("CC MD5:"+DigestUtils.md5Hex(src.getBytes()));
    }

    /**
     * 通過(guò) commons codec 實(shí)現(xiàn)MD5加密
     */
    public static void ccMD2(){
        System.out.println("CC MD2:"+DigestUtils.md2Hex(src.getBytes()));
    }

}
2-3 MD算法應(yīng)用

流程演示:

第三章:消息摘要算法SHA 3-1 SHA算法概述

消息摘要算法:SHA

安全散列算法
固定長(zhǎng)度摘要信息
SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)

算法實(shí)現(xiàn):

3-2 SHA算法實(shí)現(xiàn)

代碼演示:

package com.myimooc.security.sha;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
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;

/**
 * SHA消息摘要加密演示
 * Created by ZC on 2017/4/10.
 */
public class DemoSHA {

    /** 待加密字符串 */
    private static String src="imooc security sha";

    public static void main(String[] args){
        jdkSHA1();
        bcSHA1();
        bcSHA224();
        bcSHA224_2();
        ccSHA1();
    }

    /**
     * 通過(guò) JDK 實(shí)現(xiàn)SHA-1 加密
     */
    public static void jdkSHA1(){
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(src.getBytes());
            System.out.println("jdk sha-1:"+ Hex.encodeHexString(md.digest()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過(guò) bouncy castle 實(shí)現(xiàn)SHA-1 加密
     */
    public static void bcSHA1(){
        Digest digest = new SHA1Digest();
        digest.update(src.getBytes(),0,src.getBytes().length);
        byte[] sha1Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(sha1Bytes,0);
        System.out.println("bc sha-1:"+ org.bouncycastle.util.encoders.Hex.toHexString(sha1Bytes));
    }

    /**
     * 通過(guò) bouncy castle 實(shí)現(xiàn)SHA-224 加密
     */
    public static void bcSHA224(){
        Digest digest = new SHA224Digest();
        digest.update(src.getBytes(),0,src.getBytes().length);
        byte[] sha224Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(sha224Bytes,0);
        System.out.println("bc sha-224:"+ org.bouncycastle.util.encoders.Hex.toHexString(sha224Bytes));
    }

    /** 通過(guò) provider 實(shí)現(xiàn)SHA224加密 */
    public static void bcSHA224_2(){
        Security.addProvider(new BouncyCastleProvider());
        try {
            MessageDigest md = MessageDigest.getInstance("SHA224");
            byte[] sha224Bytes = md.digest(src.getBytes());
            System.out.println("sha-224:"+ org.bouncycastle.util.encoders.Hex.toHexString(sha224Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /** 通過(guò) commons.codec 實(shí)現(xiàn)SHA-1加密 */
    public static void ccSHA1(){
        System.out.println("cc sha1-1:"+DigestUtils.sha1Hex(src.getBytes()));
        System.out.println("cc sha1-2:"+DigestUtils.sha1Hex(src));
    }

}
3-3 SHA算法應(yīng)用

流程演示:

應(yīng)用例子:

第四章:消息摘要算法MAC 4-1 消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用

MAC(Message Authentication Code)
HMAC(keyed-Hash Message Authentication Code)

    --含有密鑰的散列函數(shù)算法
融合MD、SHA
    --MD系列:HmacMD2、HmacMD4、HmacMD5
應(yīng)用如SecureCRT

算法實(shí)現(xiàn):

代碼演示:

package com.myimooc.security.mac;

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;

/**
 * MAC消息摘要加密演示
 * Created by ZC on 2017/4/11.
 */
public class DemoMac {

    /** 待加密字符串 */
    private static String src="imooc security mac";

    public static void main(String[] args){
        jdkHmacDM5();
        bcHmacMD5();
    }

    /** jdk實(shí)現(xiàn)hmac MD5摘要算法 */
    public static void jdkHmacDM5(){
        try {
            // 初始化 KeyGenerator
            KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
            // 產(chǎn)生密鑰
            SecretKey secretKey = keyGenerator.generateKey();
            // 獲得密鑰
            //byte[] key = secretKey.getEncoded();

            // 自定義密鑰
            byte[] key = Hex.decodeHex(new char[]{"a","a","a","a","a","a","a","a","a","a"});

            // 還原密鑰
            SecretKey restoreSecretKey = new SecretKeySpec(key,"HmacMD5");
            // 實(shí)例化 MAC
            Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());
            // 初始化 MAC
            mac.init(restoreSecretKey);
            // 執(zhí)行摘要
            byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());
            System.out.println("jdk hmacMD5:"+ Hex.encodeHexString(hmacMD5Bytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /** bouncycastle.crypto實(shí)現(xiàn)hmacMD5加密 */
    public static void bcHmacMD5(){
        HMac hmac = new HMac(new MD5Digest());
        hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
        hmac.update(src.getBytes(),0,src.getBytes().length);
        // 執(zhí)行摘要
        byte[] hmacMD5Bytes = new byte[hmac.getMacSize()];
        hmac.doFinal(hmacMD5Bytes,0);

        System.out.println("bc hmacMD5:"+ org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes));
    }

}

流程演示:

消息摘要算法:其它

RipeMD
Tiger
Whirlpool
GOST3411
Bouncy Castle實(shí)現(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67033.html

相關(guān)文章

  • 課網(wǎng)_Java實(shí)現(xiàn)Base64加密學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期一說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。多用于網(wǎng)絡(luò)加密。散列函數(shù)函數(shù)或消息摘要函數(shù)主要作用散列函數(shù)用來(lái)驗(yàn)證數(shù)據(jù)的完整性。 時(shí)間:2017年4月10日星期一說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere...

    verano 評(píng)論0 收藏0
  • 課網(wǎng)_Java實(shí)現(xiàn)數(shù)字簽名》學(xué)習(xí)總結(jié)

    時(shí)間:2017年4月13日星期四說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數(shù)字簽名算法概述 數(shù)字簽名算法 簽名-安全性,抗否認(rèn)性 數(shù)字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗(yàn)...

    gotham 評(píng)論0 收藏0
  • 課網(wǎng)_Java實(shí)現(xiàn)非對(duì)稱(chēng)加密學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期三說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。秘密密鑰,生成一個(gè)分組的秘密密鑰。 時(shí)間:2017年4月12日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:概述 1-1 概述 非對(duì)稱(chēng)...

    dailybird 評(píng)論0 收藏0
  • 課網(wǎng)_Java實(shí)現(xiàn)對(duì)稱(chēng)加密學(xué)習(xí)總結(jié)

    時(shí)間:2017年4月11日星期二說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:對(duì)稱(chēng)加密算法DES 1-1 JAVA對(duì)稱(chēng)加密算法DES 加密密鑰=解密密鑰 對(duì)稱(chēng)加密算法 初等 DES --3D...

    tomlingtm 評(píng)論0 收藏0
  • 課網(wǎng)_《初識(shí)Java微信公眾號(hào)開(kāi)發(fā)》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期五說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。本套課程介紹微信公眾號(hào)開(kāi)發(fā),主要涉及公眾號(hào)介紹編輯模式介紹開(kāi)發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費(fèi)學(xué)習(xí)網(wǎng)站。 時(shí)間:2017年08月11日星期五說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github...

    PrototypeZ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<