摘要:時間年月日星期三說明本文部分內容均來自慕課網。秘密密鑰,生成一個分組的秘密密鑰。
時間:2017年4月12日星期三
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:https://github.com/zccodere/s...
個人學習源碼:https://github.com/zccodere/s...
非對稱加密算法
高級 雙保險 公鑰、私鑰 DH(Diffie-Hellman)密鑰交換算法 RSA基于因子分解 ElGamal基于離散對數 ECC(Elliptical Curve Cryptography)橢圓曲線加密第二章:密鑰交換算法DH 2-1 DH算法概述
對稱加密算法回顧
數據安全 密鑰管理復雜 密鑰傳遞過程復雜
非對稱加密算法:DH(密鑰交換)
對稱加密帶來的困擾 構建本地密鑰 密鑰對稱
算法實現:
2-2 DH算法實現過程及相關類詳解涉及相關類
初始化發送方密鑰 --KeyPairGenerator --KeyPair --PublicKey 初始化接收方密鑰 --KeyFactory --X509EncodedKeySpec --DHPublicKey --DHParameterSpec --KeyPairGenerator --PrivateKey 密鑰構建 --KeyAgreement:用來提供密鑰一致性(或密鑰交換)協議的功能。 --SecretKey:秘密密鑰,生成一個分組的秘密密鑰。 --KeyFactory --X509EncodedKeySpec --PublicKey 加密、解密 --Cipher:為加密解密提供密碼功能的類2-3 DH算法實現
代碼演示:
package com.myimooc.security.dh; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; import java.security.*; import java.security.spec.X509EncodedKeySpec; /** * DH非對稱加密演示 * Created by ZC on 2017/4/12. */ public class DemoDH { /** 待加密字符串 */ private static String src="imooc security dh"; public static void main(String[] args){ jdkDH(); } /** 使用jdk實現DH非對稱加密 */ public static void jdkDH(){ try { // 1.初始化發送方密鑰 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH"); keyPairGenerator.initialize(512); KeyPair senderKerPair = keyPairGenerator.generateKeyPair(); // 發送方公鑰,發送給接收方(網絡、文件...) byte[] senderPublicKeyEnc = senderKerPair.getPublic().getEncoded(); // 2.初始化接收方密鑰 KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH"); X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc); PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec); DHParameterSpec dhParameterSpec = ((DHPublicKey)receiverPublicKey).getParams(); KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH"); receiverKeyPairGenerator.initialize(dhParameterSpec); KeyPair receiverKeyPair = receiverKeyPairGenerator.generateKeyPair(); PrivateKey receiverPrivateKey = receiverKeyPair.getPrivate(); byte[] receiverPublicKeyEnc = receiverKeyPair.getPublic().getEncoded(); // 3.密鑰構建 KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH"); receiverKeyAgreement.init(receiverPrivateKey); receiverKeyAgreement.doPhase(receiverPublicKey,true); SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES"); KeyFactory senderKeyFactory = KeyFactory.getInstance("DH"); x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKeyEnc); PublicKey senderPublicKey = senderKeyFactory.generatePublic(x509EncodedKeySpec); KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH"); senderKeyAgreement.init(senderKerPair.getPrivate()); senderKeyAgreement.doPhase(senderPublicKey,true); SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES"); // if(Objects.equals(receiverDesKey,senderDesKey)){ // System.out.println("雙方密鑰相同"); // } // 4.加密 Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE,senderDesKey); byte[] result = cipher.doFinal(src.getBytes()); System.out.println("jdk dh encrypt:"+ Base64.encodeBase64String(result)); // 5.解密 cipher.init(Cipher.DECRYPT_MODE,receiverDesKey); result = cipher.doFinal(result); System.out.println("jdk dh decrypt:"+ new String(result)); } catch (Exception e) { e.printStackTrace(); } } }
流程演示:
第三章:RSA算法 3-1 RSA算法實現及應用非對稱加密算法:RSA
唯一廣泛接受并實現 數據加密&數字簽名 公鑰加密、私鑰解密 私鑰加密、公鑰解密
算法實現:
代碼演示:
package com.myimooc.security.rsa; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * RSA非對稱加密演示 * Created by ZC on 2017/4/12. */ public class DemoRSA { /** 待加密字符串 */ private static String src="imooc security rsa"; public static void main(String[] args){ jdkRSA(); } public static void jdkRSA(){ try{ // 1.初始化密鑰 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPair = keyPairGenerator.generateKeyPair(); RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); // 2.私鑰加密、公鑰解密:加密 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,privateKey); byte[] result = cipher.doFinal(src.getBytes()); System.out.println("私鑰加密、公鑰解密:加密:"+ Base64.encodeBase64String(result)); // 3.私鑰加密、公鑰解密:解密 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); cipher.init(Cipher.DECRYPT_MODE,publicKey); result = cipher.doFinal(result); System.out.println("私鑰加密、公鑰解密:解密:"+ new String(result)); // 4.公鑰加密、私鑰解密:加密 x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); keyFactory = KeyFactory.getInstance("RSA"); publicKey = keyFactory.generatePublic(x509EncodedKeySpec); cipher.init(Cipher.ENCRYPT_MODE,publicKey); result = cipher.doFinal(src.getBytes()); System.out.println("公鑰加密、私鑰解密:加密:"+ Base64.encodeBase64String(result)); // 5.公鑰加密、私鑰解密:解密 pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); keyFactory = KeyFactory.getInstance("RSA"); privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE,privateKey); result = cipher.doFinal(result); System.out.println("公鑰加密、私鑰解密:解密:"+ new String(result)); }catch (Exception e){ e.printStackTrace(); } } }
流程演示:
第四章:ELGamal算法 4-1 ELGamal算法實現非對稱加密算法:ELGamal
公鑰加密算法 Bouncy Castle
算法實現:
部分代碼演示:
package com.myimooc.security.elgamal; import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.spec.DHParameterSpec; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * ELGamal非對稱加密演示 * Created by ZC on 2017/4/12. */ public class DemoELGamal { /** 待加密字符串 */ private static String src="imooc security elgamal"; public static void main(String[] args)throws Exception{ bcELGamal(); } /** 使用 BouncyCastle 實現 ELGamal 加解密 */ public static void bcELGamal()throws Exception{ // 公鑰加密,私鑰解密 Security.addProvider(new BouncyCastleProvider()); // 1.初始化密鑰 AlgorithmParameterGenerator algorithmParameterGenerator = AlgorithmParameterGenerator.getInstance("ELGamal"); algorithmParameterGenerator.init(256); AlgorithmParameters algorithmParameters = algorithmParameterGenerator.generateParameters(); DHParameterSpec dhParameterSpec = (DHParameterSpec) algorithmParameters.getParameterSpec(DHParameterSpec.class); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ELGamal"); keyPairGenerator.initialize(dhParameterSpec,new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); System.out.println("Public Key:"+ Base64.encodeBase64String(publicKey.getEncoded())); System.out.println("Private Key:"+ Base64.encodeBase64String(privateKey.getEncoded())); } }
流程演示:
非對稱加密算法:回顧
公鑰、私鑰 DH(Diffie-Hellman)密鑰交換算法 RSA基于因子分解 ElGamal基于離散對數
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67034.html
摘要:時間年月日星期一說明本文部分內容均來自慕課網。多用于網絡加密。散列函數函數或消息摘要函數主要作用散列函數用來驗證數據的完整性。 時間:2017年4月10日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere...
時間: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年4月10日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 Java實現消息摘要算法加密 消息摘要算法 MD(Message Digest) SHA(Secure H...
時間:2017年4月13日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數字簽名算法概述 數字簽名算法 簽名-安全性,抗否認性 數字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗...
摘要:時間年月日星期五說明本文部分內容均來自慕課網。線性堆疊式二維碼示意圖矩陣式二維碼在一個矩形空間通過黑白像素在矩陣中的不同分布進行編碼。 時間:2017年06月23日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:二維碼的概念 1-1 二維碼概述...
閱讀 1718·2021-10-18 13:34
閱讀 3906·2021-09-08 10:42
閱讀 1551·2021-09-02 09:56
閱讀 1606·2019-08-30 15:54
閱讀 3127·2019-08-29 18:44
閱讀 3298·2019-08-26 18:37
閱讀 2212·2019-08-26 12:13
閱讀 453·2019-08-26 10:20