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

資訊專欄INFORMATION COLUMN

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

tomlingtm / 2822人閱讀

時(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ì)稱加密算法DES 1-1 JAVA對(duì)稱加密算法DES

加密密鑰=解密密鑰

對(duì)稱加密算法

初等
DES
    --3DES
AES
PBE
IDEA

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

代碼演示:

package com.myimooc.security.des;

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

/**
 * DES對(duì)稱加密演示
 * Created by ZC on 2017/4/11.
 */
public class DemoDES {
    /** 待加密字符串 */
    private static String src="imooc security des";

    public static void main(String[] args){
        jdkDES();
        bcDES();
    }

    /** 使用 jdk 實(shí)現(xiàn)des加解密 */
    public static void jdkDES(){
        try {
            // 生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(56);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] byteKey = secretKey.getEncoded();

            // KEY轉(zhuǎn)換
            DESKeySpec desKeySpec = new DESKeySpec(byteKey);
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
            Key convertSecretKey = secretKeyFactory.generateSecret(desKeySpec);

            // 加密
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());

            System.out.println("jdk des encrypt:"+ Hex.encodeHexString(result));

            // 解密
            cipher.init(Cipher.DECRYPT_MODE,convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("jdk des decrypt:"+ new String(result));

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

    /** 使用BouncyCastle實(shí)現(xiàn)DES加解密 */
    public static void bcDES(){
        try {
            Security.addProvider(new BouncyCastleProvider());

            // 生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");
            keyGenerator.init(56);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] byteKey = secretKey.getEncoded();

            // KEY轉(zhuǎn)換
            DESKeySpec desKeySpec = new DESKeySpec(byteKey);
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
            Key convertSecretKey = secretKeyFactory.generateSecret(desKeySpec);

            // 加密
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());

            System.out.println("jdk des encrypt:"+ Hex.encodeHexString(result));

            // 解密
            cipher.init(Cipher.DECRYPT_MODE,convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("jdk des decrypt:"+ new String(result));

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

流程演示:

第二章:對(duì)稱加密算法3DES 2-1 JAVA對(duì)稱加密算法3DES

為什么會(huì)有3重DES,DES的劣勢(shì)

1.違反柯克霍夫原則
2.安全問(wèn)題

3重DES的好處

1.密鑰長(zhǎng)度增強(qiáng)
2.迭代次數(shù)提高

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

代碼演示:

package com.myimooc.security.des;

import org.apache.commons.codec.binary.Hex;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;
import java.security.Key;
import java.security.SecureRandom;

/**
 * 3DES對(duì)稱加密演示
 * Created by ZC on 2017/4/11.
 */
public class Demo3DES {

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

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

    /** 使用jdk實(shí)現(xiàn)3重DES加解密 */
    private static void jdk3des(){
        try {
            // 生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
            //keyGenerator.init(168);
            keyGenerator.init(new SecureRandom());
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] byteKey = secretKey.getEncoded();

            // KEY轉(zhuǎn)換
            DESedeKeySpec desKeySpec = new DESedeKeySpec(byteKey);
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
            Key convertSecretKey = secretKeyFactory.generateSecret(desKeySpec);

            // 加密
            Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());

            System.out.println("jdk 3des encrypt:"+ Hex.encodeHexString(result));

            // 解密
            cipher.init(Cipher.DECRYPT_MODE,convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("jdk 3des decrypt:"+ new String(result));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
第三章:對(duì)稱加密算法AES 3-1 JAVA對(duì)稱加密算法AES

JAVA對(duì)稱加密算法:AES

AES是目前使用最多的對(duì)稱加密算法
AES的優(yōu)勢(shì)之一是至今尚未被破解
AES通常用于移動(dòng)通信系統(tǒng)加密以及基于SSH協(xié)議的軟件
    比如:SSH Clint、secureCRT

AES算法

高級(jí)
DES替代者

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

代碼演示:

package com.myimooc.security.aes;

import org.apache.commons.codec.binary.Base64;

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

/**
 * /**
 * AES對(duì)稱加密演示
 * Created by ZC on 2017/4/11.
 */
public class DemoAES {

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

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

    /** 通過(guò)JDK實(shí)現(xiàn)AES對(duì)稱加密 */
    public static void jdkAES(){
        try {
            // 生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(128);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] keyBytes = secretKey.getEncoded();

            // KEY 轉(zhuǎn)換
            Key key = new SecretKeySpec(keyBytes,"AES");

            // 加密
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,key);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("jdk aes encrypt:"+ Base64.encodeBase64String(result));

            // 解密
            cipher.init(Cipher.DECRYPT_MODE,key);
            result=cipher.doFinal(result);
            System.out.println("jdk aes decrypt:"+ new String(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

流程演示:

第四章:對(duì)稱加密算法PBE 4-1 JAVA對(duì)稱加密算法PBE

PBE:綜合性對(duì)稱加密算法

PBE(Password Based Encyption)基于口令加密
對(duì)已有算法的包裝
JDK、BC
鹽
PBEWithMD5AndDES

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

代碼演示:

package com.myimooc.security.pbe;

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.Key;
import java.security.SecureRandom;

/**
 * /**
 * /**
 * PBE對(duì)稱加密演示
 * Created by ZC on 2017/4/11.
 */
public class DemoPBE {
    /** 待加密字符串 */
    private static String src="imooc security pbe";

    private static final String TOKEN = "imooc";

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

    /** 使用JDK實(shí)現(xiàn)PBE算法加解密 */
    public static void jdkPBE(){
        try{
            // 初始化鹽
            SecureRandom random = new SecureRandom();
            byte[] salt = random.generateSeed(8);

            // 口令與密鑰
            String password = TOKEN;
            PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
            Key key = factory.generateSecret(pbeKeySpec);

            // 加密
            PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt,100);
            Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
            cipher.init(Cipher.ENCRYPT_MODE,key,pbeParameterSpec);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("jdk pbe encrypt:"+ Base64.encodeBase64String(result));

            // 解密
            cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);
            result = cipher.doFinal(result);
            System.out.println("jdk pbe decrypt:"+ Base64.encodeBase64String(result));

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

流程演示:

第五章:小結(jié) 5-1 對(duì)稱加密算法小結(jié)

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

初等
DES
    --3DES
AES
PBE

加密和解密不在同一方怎么辦?

把密鑰發(fā)給對(duì)方

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

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

相關(guān)文章

  • 課網(wǎng)_Java實(shí)現(xiàn)對(duì)稱加密學(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ì)稱...

    dailybird 評(píng)論0 收藏0
  • 課網(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)消息摘要算法加密學(xué)習(xí)總結(jié)

    時(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 H...

    zengdongbao 評(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生成二維碼》學(xué)習(xí)總結(jié)

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

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

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

0條評(píng)論

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