时间: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、secureCRT

AES算法

高级
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实现对称加密》学习总结相关推荐

  1. 慕课网_《微信授权登录》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/ ...

  2. 微信授权登录(微信订阅号使用测试账号)

    1.微信授权登录: 微信公众号测试登录: 准备: 1.1 花生壳! 下载地址:http://hsk.oray.com/download/ 1.2 微信公众号:https://mp.weixin.qq. ...

  3. 硅谷课堂 12_公众号消息和微信授权登录

    硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...

  4. uni app和php开发微信登录代码,uniapp如何实现微信授权登录

    uniapp实现微信授权登录的方法:首先获取对应的appid和appsecret:然后在uniapp项目的manifest.json中进行APP SDK配置和模块权限配置.最后实现编码. 本教程操作环 ...

  5. thinkphp 微信授权登录 以及微信实现分享

    <?php namespace app\wechat\controller; use think\Controller; use think\Request; /** * 微信授权登录类 * U ...

  6. code换取微信openid_微信授权登录开发的两种方式

    本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...

  7. Java版本微信授权登录(升级版)

    前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...

  8. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  9. uniapp开发h5微信授权登录(详细教程)

    uniapp开发h5微信授权登录 文章目录 uniapp开发h5微信授权登录 前言 一.前期准备--申请测试账号 二.正式开发--前端代码 三.打包发布 总结 前言 我也是第一次做h5授权微信登录,网 ...

  10. springboot微信授权登录

    水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular, ...

最新文章

  1. Chapter 5 Blood Type——24
  2. Problem H Rock Paper Scissors,FFT
  3. Apache Ignite变得简单:第一个Java应用程序
  4. 下载 | 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT
  5. delphi listview 添加数据 慢_Delphi 二十四岁, Delphi 10.3.1 发布
  6. 搭建一个简单的FTP服务器
  7. linux 7 network fail,CentOs7 网卡出现问题Job for network.service failed
  8. tkMessageBox only show one window
  9. 《OpenGL编程指南》一1.2 初识OpenGL程序
  10. Delphi10.2下载和安装详解教程(很全的教程)
  11. svnadmin的使用
  12. pdg文件格式 到 pdf文件格式 的转换
  13. 基于Arduino、STM32进行红外遥控信号接收
  14. 车载网络基础——预备篇
  15. java接口参数默认值_下面关于setMaxAge(int expires)方法参数默认值的描述中,正确的是(5.0分)_学小易找答案...
  16. 【黑马程序员】20天学会Java-基础阶段笔记
  17. 使用dig/nslookup命令查看dns解析详情
  18. 分享一个有意思题目--击鼓传花
  19. 儿童周成就任务全攻略
  20. 机器人 零境交错吧_电击文库零境交错角色培养攻略 角色培养方法详解

热门文章

  1. 《帝友 P2P 网络借贷系统》
  2. leetcode371. 两整数之和 不用+号做加法
  3. 单链表的实现【数据结构】
  4. 记一次海外大型SLG游戏服务器进程被OOM的修复经历
  5. opencv findContours 报错_acrt_first_block == header
  6. CLion 输出遇到乱码解决办法,GBK和utf-8的转换
  7. Java基础——Java异常处理机制
  8. Linux学习笔记(一)------实操排雷
  9. 如何用Linux命令行管理网络:11个你必须知道的命令
  10. mp4(H264容器)的详细文件格式分析