慕课网_《Java实现对称加密》学习总结
生活随笔
收集整理的這篇文章主要介紹了
慕课网_《Java实现对称加密》学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
時間:2017年4月11日星期二
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:https://github.com/zccodere/s...
個人學習源碼:https://github.com/zccodere/s...
第一章:對稱加密算法DES
1-1 JAVA對稱加密算法DES
加密密鑰=解密密鑰
對稱加密算法
初等 DES--3DES AES PBE IDEA算法實現:
代碼演示:
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對稱加密演示* 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 實現des加解密 */public static void jdkDES(){try {// 生成KEYKeyGenerator keyGenerator = KeyGenerator.getInstance("DES");keyGenerator.init(56);SecretKey secretKey = keyGenerator.generateKey();byte[] byteKey = secretKey.getEncoded();// KEY轉換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實現DES加解密 */public static void bcDES(){try {Security.addProvider(new BouncyCastleProvider());// 生成KEYKeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");keyGenerator.init(56);SecretKey secretKey = keyGenerator.generateKey();byte[] byteKey = secretKey.getEncoded();// KEY轉換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();}} }流程演示:
第二章:對稱加密算法3DES
2-1 JAVA對稱加密算法3DES
為什么會有3重DES,DES的劣勢
1.違反柯克霍夫原則 2.安全問題3重DES的好處
1.密鑰長度增強 2.迭代次數提高算法實現:
代碼演示:
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對稱加密演示* 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實現3重DES加解密 */private static void jdk3des(){try {// 生成KEYKeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");//keyGenerator.init(168);keyGenerator.init(new SecureRandom());SecretKey secretKey = keyGenerator.generateKey();byte[] byteKey = secretKey.getEncoded();// KEY轉換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();}} }第三章:對稱加密算法AES
3-1 JAVA對稱加密算法AES
JAVA對稱加密算法:AES
AES是目前使用最多的對稱加密算法 AES的優勢之一是至今尚未被破解 AES通常用于移動通信系統加密以及基于SSH協議的軟件比如:SSH Clint、secureCRTAES算法
高級 DES替代者算法實現:
代碼演示:
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對稱加密演示* Created by ZC on 2017/4/11.*/ public class DemoAES {/** 待加密字符串 */private static String src="imooc security aes";public static void main(String[] args){jdkAES();}/** 通過JDK實現AES對稱加密 */public static void jdkAES(){try {// 生成KEYKeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();byte[] keyBytes = secretKey.getEncoded();// KEY 轉換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();}} }流程演示:
第四章:對稱加密算法PBE
4-1 JAVA對稱加密算法PBE
PBE:綜合性對稱加密算法
PBE(Password Based Encyption)基于口令加密 對已有算法的包裝 JDK、BC 鹽 PBEWithMD5AndDES算法實現:
代碼演示:
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對稱加密演示* 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實現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();}} }流程演示:
第五章:小結
5-1 對稱加密算法小結
對稱加密算法:回顧
初等 DES--3DES AES PBE加密和解密不在同一方怎么辦?
把密鑰發給對方總結
以上是生活随笔為你收集整理的慕课网_《Java实现对称加密》学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php运行资源库,如何在sublime上
- 下一篇: php5.2 get漏洞,ThinkPH