慕课网_《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.mzph.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 (编…