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

資訊專欄INFORMATION COLUMN

慕課網(wǎng)_《Java實現(xiàn)非對稱加密》學習總結

dailybird / 706人閱讀

摘要:時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。秘密密鑰,生成一個分組的秘密密鑰。

時間:2017年4月12日星期三
說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學示例源碼:https://github.com/zccodere/s...
個人學習源碼:https://github.com/zccodere/s...

第一章:概述 1-1 概述

非對稱加密算法

高級
雙保險
公鑰、私鑰
DH(Diffie-Hellman)密鑰交換算法
RSA基于因子分解
ElGamal基于離散對數(shù)
ECC(Elliptical Curve Cryptography)橢圓曲線加密
第二章:密鑰交換算法DH 2-1 DH算法概述

對稱加密算法回顧

數(shù)據(jù)安全
密鑰管理復雜
密鑰傳遞過程復雜

非對稱加密算法:DH(密鑰交換)

對稱加密帶來的困擾
構建本地密鑰
密鑰對稱

算法實現(xiàn):

2-2 DH算法實現(xiàn)過程及相關類詳解

涉及相關類

初始化發(fā)送方密鑰
    --KeyPairGenerator
    --KeyPair
    --PublicKey
初始化接收方密鑰
    --KeyFactory
    --X509EncodedKeySpec
    --DHPublicKey
    --DHParameterSpec
    --KeyPairGenerator
    --PrivateKey
密鑰構建
    --KeyAgreement:用來提供密鑰一致性(或密鑰交換)協(xié)議的功能。
    --SecretKey:秘密密鑰,生成一個分組的秘密密鑰。
    --KeyFactory
    --X509EncodedKeySpec
    --PublicKey
加密、解密
    --Cipher:為加密解密提供密碼功能的類
2-3 DH算法實現(xiàn)

代碼演示:

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實現(xiàn)DH非對稱加密 */
    public static void jdkDH(){
        try {
            // 1.初始化發(fā)送方密鑰
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");
            keyPairGenerator.initialize(512);
            KeyPair senderKerPair = keyPairGenerator.generateKeyPair();
            // 發(fā)送方公鑰,發(fā)送給接收方(網(wǎng)絡、文件...)
            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算法實現(xiàn)及應用

非對稱加密算法:RSA

唯一廣泛接受并實現(xiàn)
數(shù)據(jù)加密&數(shù)字簽名
公鑰加密、私鑰解密
私鑰加密、公鑰解密

算法實現(xiàn):

代碼演示:

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算法實現(xiàn)

非對稱加密算法:ELGamal

公鑰加密算法
Bouncy Castle

算法實現(xiàn):

部分代碼演示:

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 實現(xiàn) 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基于離散對數(shù)

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

轉載請注明本文地址:http://systransis.cn/yun/67034.html

相關文章

  • 課網(wǎng)_Java實現(xiàn)Base64加密學習總結

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

    verano 評論0 收藏0
  • 課網(wǎng)_Java實現(xiàn)對稱加密學習總結

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

    tomlingtm 評論0 收藏0
  • 課網(wǎng)_Java實現(xiàn)消息摘要算法加密學習總結

    時間:2017年4月10日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 Java實現(xiàn)消息摘要算法加密 消息摘要算法 MD(Message Digest) SHA(Secure H...

    zengdongbao 評論0 收藏0
  • 課網(wǎng)_Java實現(xiàn)數(shù)字簽名》學習總結

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

    gotham 評論0 收藏0
  • 課網(wǎng)_Java生成二維碼》學習總結

    摘要:時間年月日星期五說明本文部分內(nèi)容均來自慕課網(wǎng)。線性堆疊式二維碼示意圖矩陣式二維碼在一個矩形空間通過黑白像素在矩陣中的不同分布進行編碼。 時間:2017年06月23日星期五說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:二維碼的概念 1-1 二維碼概述...

    QLQ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<