成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

慕課網(wǎng)_《Java實(shí)現(xiàn)非對(duì)稱加密》學(xué)習(xí)總結(jié)

dailybird / 744人閱讀

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

時(shí)間:2017年4月12日星期三
說明:本文部分內(nè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ì)稱加密算法

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

對(duì)稱加密算法回顧

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

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

對(duì)稱加密帶來的困擾
構(gòu)建本地密鑰
密鑰對(duì)稱

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

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

涉及相關(guān)類

初始化發(fā)送方密鑰
    --KeyPairGenerator
    --KeyPair
    --PublicKey
初始化接收方密鑰
    --KeyFactory
    --X509EncodedKeySpec
    --DHPublicKey
    --DHParameterSpec
    --KeyPairGenerator
    --PrivateKey
密鑰構(gòu)建
    --KeyAgreement:用來提供密鑰一致性(或密鑰交換)協(xié)議的功能。
    --SecretKey:秘密密鑰,生成一個(gè)分組的秘密密鑰。
    --KeyFactory
    --X509EncodedKeySpec
    --PublicKey
加密、解密
    --Cipher:為加密解密提供密碼功能的類
2-3 DH算法實(shí)現(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非對(duì)稱加密演示
 * 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實(shí)現(xiàn)DH非對(duì)稱加密 */
    public static void jdkDH(){
        try {
            // 1.初始化發(fā)送方密鑰
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");
            keyPairGenerator.initialize(512);
            KeyPair senderKerPair = keyPairGenerator.generateKeyPair();
            // 發(fā)送方公鑰,發(fā)送給接收方(網(wǎng)絡(luò)、文件...)
            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.密鑰構(gòu)建
            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算法實(shí)現(xiàn)及應(yīng)用

非對(duì)稱加密算法:RSA

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

算法實(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非對(duì)稱加密演示
 * 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算法實(shí)現(xiàn)

非對(duì)稱加密算法:ELGamal

公鑰加密算法
Bouncy Castle

算法實(shí)現(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非對(duì)稱加密演示
 * 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 實(shí)現(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()));

    }

}

流程演示:

非對(duì)稱加密算法:回顧

公鑰、私鑰
DH(Diffie-Hellman)密鑰交換算法
RSA基于因子分解
ElGamal基于離散對(duì)數(shù)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67034.html

相關(guān)文章

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

    摘要:時(shí)間年月日星期一說明本文部分內(nèi)容均來自慕課網(wǎng)。多用于網(wǎng)絡(luò)加密。散列函數(shù)函數(shù)或消息摘要函數(shù)主要作用散列函數(shù)用來驗(yàn)證數(shù)據(jù)的完整性。 時(shí)間:2017年4月10日星期一說明:本文部分內(nè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)對(duì)稱加密學(xué)習(xí)總結(jié)

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

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

    時(shí)間:2017年4月10日星期一說明:本文部分內(nè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 H...

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

    時(shí)間:2017年4月13日星期四說明:本文部分內(nè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生成二維碼》學(xué)習(xí)總結(jié)

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<