時(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 --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ì)稱加密算法PBEPBE:綜合性對(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
摘要:時(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ì)稱...
摘要:時(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...
時(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...
時(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)...
摘要:時(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 二維碼概述...
閱讀 2136·2021-11-19 09:58
閱讀 1721·2021-11-15 11:36
閱讀 2881·2019-08-30 15:54
閱讀 3400·2019-08-29 15:07
閱讀 2775·2019-08-26 11:47
閱讀 2828·2019-08-26 10:11
閱讀 2513·2019-08-23 18:22
閱讀 2764·2019-08-23 17:58