時間:2017年4月10日星期一
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:https://github.com/zccodere/s...
個人學習源碼:https://github.com/zccodere/s...
消息摘要算法
MD(Message Digest) SHA(Secure Hash Algorithm) MAC(Message Authentication Code) 驗證數據完整性 數字簽名核心算法第二章:消息摘要算法MD 2-1 MD算法概述
消息摘要算法:MD
MD5 MD家族(128位摘要信息) --MD2、MD4 特點
算法實現:
2-2 MD算法實現代碼演示:
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(); } /** * 通過 jdk 實現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(); } } /** * 通過 jdk 實現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(); } } /** * 通過 bouncy castle 實現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)); } /** * 通過 bouncy castle 實現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(); } } /** * 通過 commons codec 實現MD5加密 */ public static void ccMD5(){ System.out.println("CC MD5:"+DigestUtils.md5Hex(src.getBytes())); } /** * 通過 commons codec 實現MD5加密 */ public static void ccMD2(){ System.out.println("CC MD2:"+DigestUtils.md2Hex(src.getBytes())); } }2-3 MD算法應用
流程演示:
第三章:消息摘要算法SHA 3-1 SHA算法概述消息摘要算法:SHA
安全散列算法 固定長度摘要信息 SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)
算法實現:
3-2 SHA算法實現代碼演示:
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(); } /** * 通過 JDK 實現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(); } } /** * 通過 bouncy castle 實現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)); } /** * 通過 bouncy castle 實現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)); } /** 通過 provider 實現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(); } } /** 通過 commons.codec 實現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算法應用
流程演示:
應用例子:
第四章:消息摘要算法MAC 4-1 消息摘要算法MAC實現與應用MAC(Message Authentication Code)
HMAC(keyed-Hash Message Authentication Code)
--含有密鑰的散列函數算法 融合MD、SHA --MD系列:HmacMD2、HmacMD4、HmacMD5 應用如SecureCRT
算法實現:
代碼演示:
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實現hmac MD5摘要算法 */ public static void jdkHmacDM5(){ try { // 初始化 KeyGenerator KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); // 產生密鑰 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"); // 實例化 MAC Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm()); // 初始化 MAC mac.init(restoreSecretKey); // 執行摘要 byte[] hmacMD5Bytes = mac.doFinal(src.getBytes()); System.out.println("jdk hmacMD5:"+ Hex.encodeHexString(hmacMD5Bytes)); } catch (Exception e) { e.printStackTrace(); } } /** bouncycastle.crypto實現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); // 執行摘要 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實現
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67033.html
摘要:時間年月日星期一說明本文部分內容均來自慕課網。多用于網絡加密。散列函數函數或消息摘要函數主要作用散列函數用來驗證數據的完整性。 時間:2017年4月10日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere...
時間:2017年4月13日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數字簽名算法概述 數字簽名算法 簽名-安全性,抗否認性 數字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗...
摘要:時間年月日星期三說明本文部分內容均來自慕課網。秘密密鑰,生成一個分組的秘密密鑰。 時間:2017年4月12日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 概述 非對稱...
時間:2017年4月11日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...
摘要:時間年月日星期五說明本文部分內容均來自慕課網。本套課程介紹微信公眾號開發,主要涉及公眾號介紹編輯模式介紹開發模式介紹等。慕課網是垂直的互聯網技能免費學習網站。 時間:2017年08月11日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github...
閱讀 3939·2021-10-09 09:43
閱讀 2871·2021-10-08 10:05
閱讀 2734·2021-09-08 10:44
閱讀 882·2019-08-30 15:52
閱讀 2809·2019-08-26 17:01
閱讀 3016·2019-08-26 13:54
閱讀 1650·2019-08-26 10:48
閱讀 807·2019-08-23 14:41