慕課網_《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

算法實現:

clipboard.png

代碼演示:

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();}}
}

流程演示:

clipboard.png

第二章:對稱加密算法3DES

2-1 JAVA對稱加密算法3DES

為什么會有3重DES,DES的劣勢

1.違反柯克霍夫原則
2.安全問題

3重DES的好處

1.密鑰長度增強
2.迭代次數提高

算法實現:

clipboard.png

代碼演示:

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、secureCRT

AES算法

高級
DES替代者

算法實現:

clipboard.png

代碼演示:

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();}}
}

流程演示:

clipboard.png

第四章:對稱加密算法PBE

4-1 JAVA對稱加密算法PBE

PBE:綜合性對稱加密算法

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

算法實現:

clipboard.png

代碼演示:

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();}}
}

流程演示:

clipboard.png

第五章:小結

5-1 對稱加密算法小結

對稱加密算法:回顧

初等
DES--3DES
AES
PBE

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

把密鑰發給對方

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456755.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456755.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456755.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據之MapReduce詳解(MR的運行機制及配合WordCount實例來說明運行機制)

目錄前言:1、MapReduce原理2、mapreduce實踐(WordCount實例) 目錄 今天先總體說下MapReduce的相關知識,后續將會詳細說明對應的shuffle、mr與yarn的聯系、以及mr的join操作的等知識。以下內容全是個人學習后的見解,如…

生動形象的理解什么是裝飾器!

裝飾器 裝飾器是程序開發中經常會用到的一個功能,用好了裝飾器,開發效率如虎添翼,所以這也是Python面試中必問的問題,但對于好多初次接觸這個知識的人來講,這個功能有點繞,自學時直接繞過去了,…

PLSQL 申明和游標

--從鍵盤輸入一個數 accept b prompt 請輸入一個大于零的數字; declareanum number : &b; beginwhile anum>0loopdbms_output.put_line(anum);anum:anum-1;end loop; end;declarev_num number; begin -- 從stsu表中選出id最大的值,并根據該值打印次數select …

20155222 2016-2017-2 《Java程序設計》第8周學習總結

20155222 2016-2017-2 《Java程序設計》第8周學習總結 教材學習內容總結 Java NIO(New IO)是一個可以替代標準Java IO API的IO API(從Java 1.4開始),Java NIO提供了與標準IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和緩沖區&…

BAT經典面試題精簡版(基礎知識附答案)

文章目錄目錄J2SE基礎JVM操作系統TCP/IP數據結構與算法目錄 J2SE基礎 九種基本數據類型的大小,以及他們的封裝類。 原始類型封裝類 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble Switch能否用string做參數&…

使用2to3.py 轉換 python2.x 代碼 到python3

1.使用Windows 命令提示符(cmd)cd到2to3.py 腳本所在位置,如下圖: 找不到的2 to 3.py的去 pycharm中雙擊shift搜索一下 2.緊接著運行 2to3.py 腳本(可省略) 3.執行你想要轉換的文件 python 2to3.py -w H:…

iis6.0與asp.net的運行原理

這幾天上網翻閱了不少前輩們的關于iis和asp.net運行原理的博客,學的有點零零散散,花了好長時間做了一個小結(雖然文字不多,但也花了不少時間呢),鄙人不才,難免有理解不道的地方,還望…

元類--用不上的先了解

元類 1. 類也是對象 在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段。在Python中這一點仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object ObjectCreator() >>> print(my_ob…

Android學習筆記進階十之Matrix錯切變換

剛開始我也不懂啥叫錯切變換,一看效果圖你就恍然大悟。 對圖像的錯切變換做個總結: x x0 b*y0; y d*x0 y0; 與之對應的方法是: [java] view plaincopyMatrix matrix new Matrix(); matrix.setSkew(0.0f, 0.5f);

SQL數據庫實戰(含建表數據和查詢案例)

Oracle數據庫安裝的時候會自帶一個練習用數據庫(其中包含employee表,后來版本中此表改名為emp); 首先在安裝過程中應該有個選項“是否安裝實例表”(完全安裝模式下默認是選擇的),需要選擇才有此…

Django中的核心思想ORM---元類實現ORM

1. ORM是什么 ORM 是 python編程語言后端web框架 Django的核心思想,“Object Relational Mapping”,即對象-關系映射,簡稱ORM。 一個句話理解就是:創建一個實例對象,用創建它的類名當做數據表名,用創建它…

移動互聯網廣告 - 第十更 - 廣告投放運營 DashBoard - 2016/12/10

廣告投放運營 DashBoard設計 移動互聯網互聯網廣告投放,數據監控DashBoard,基礎樣例示意,下圖僅供參考(來自于互聯網)。 轉載于:https://www.cnblogs.com/pythonMLer/p/6154700.html

微信小程序中使用emoji表情相關說明

2019獨角獸企業重金招聘Python工程師標準>>> 本帖將聚合一些跟emoji表情有關的知識;相關文章:“i愛記賬” 小程序后端開發小結 第7條經驗前端傳過來的昵稱和備注信息一定要經過嚴格的正則表達式過濾,放置出現XSS等攻擊&#xff0c…

java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis

執行Hive語句運行MapReduce程序時突然出現這樣的異常: Total MapReduce jobs 1 Launching Job 1 out of 1 Number of reduce tasks not specified. Estimated from input data size: 1 In order to change the average load for a reducer (in bytes):set hive.ex…

Oracle基礎語句

1、創建表create table IT_EMPLOYEES(ENPLOYEES_ID NUMBER(6) NOT NULL UNIQUE,FIRST_NAME VARCHAR2(20),LAST_NAME VARCHAR2(25) NOT NULL,EMAIL VARCHAR2(25),PHONE_NUMBER VARCHAR2(20),JOB_ID VARCHAR2(10),SALARY NUMBER(8,2),MANAGER_ID NUMBER(6));2、--創建索引&#x…

Linux三劍客之grep 與 egrep

grep:Linux上文本處理三劍客1 grep:文本過濾(模式:pattern)工具; *(grep, egrep, fgrep) 2 sed:stream editor,文本編輯工具; 3 awk:Linux上的實現gawk,文本報…

WSGI直觀形象的了解一下

1. 瀏覽器請求動態頁面過程 2. WSGI 怎么在你剛建立的Web服務器上運行一個Django應用和Flask應用,如何不做任何改變而適應不同的web架構呢? 在以前,選擇 Python web 架構會受制于可用的web服務器,反之亦然。如果架構和服務器可以…

安裝Hbase(分布式)遇到一些問題及解決方法

問題一:安裝完成后在Hbase shell 命令行執行list命令時,爆出如下錯誤: hbase(main):001:0> list TABLE …

安裝MySql卡在Start Service的問題

我的情況:之前在windows下安裝過5.6版本,卸載后,現在安裝5.7版本,然后卡在Start Service這里,log日志沒報任何錯誤,后來經過不斷的嘗試各種網上的辦法終于把問題解決了。 問題的原因就是當初卸載5.6版本時…

學習進度條11

第十三周 日期 星期一 星期二 星期三 星期四 星期五 星期六 所花時間(包括上課) 19:10-22:20 (編程河北省科技信息通用調查系統) 8:00-10:00 (上課) 18:30-21:00 (Oracle實驗) 14:00-16:30 (編程河北省科技信息通用調查系統) 18:20-22:30 (編…