对称加密算法概念

加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。

特点:算法公开、(相比非对称加密)计算量小、加密速度快、效率高。

弱点:双方都使用同样的密钥,安全性得不到保证。

常用对称加密算法

DES(Data Encryption Standard)

3DES(DES加强版,使用3次DES计算,Triple DES,DESede)

AES(Advanced Encryption Standard,3DES加强版)

JDK版DES/3DES/AES算法调用模板

1. 生成密钥

//KeyGenerator,密钥生成器

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//算法:DES,DESede,AES

//初始化密钥生成器

keyGen.init(56); //各算法密钥长度不同,参见说明

//生成密钥

SecretKey secretKey = keyGen.generateKey();

//生产字节码数据

byte[] key = secretKey.getEncoded();

说明:

1.通过「KeyGenerator.getInstance("DES")」生成密钥,

2.参数为算法名称:分别对应DES、DESede(即3DES)、AES

3.每种算法密钥长度参数:DES(56),3DES(112,168),AES(192,256)

2.加/解密

//通过字节码数据key 恢复密钥

SecretKey secretKey = new SecretKeySpec(key, "DES");

//Cipher完成加密/解密工作

Cipher cipher = Cipher.getInstance("DES");

//根据密钥,对Cipher初始化,并选择加密还是解密

cipher.init(Cipher.ENCRYPT_MODE, secretKey);

byte[] result = cipher.doFinal(data);

1.加密或解密都通过cipher.init()设置,参数:ENCRYPT_MODE/DECRYPT_MODE

2.加密或解密都通过cipher.doFinal() 执行,获得byte[]类型结果。

代码示例

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class DESUtil {

/*

* 生成密钥

*/

public static byte[] initKey() throws Exception{

KeyGenerator keyGen = KeyGenerator.getInstance("DES");

keyGen.init(56);

SecretKey secretKey = keyGen.generateKey();

return secretKey.getEncoded();

}

/*

* DES 加密

*/

public static byte[] encrypt(byte[] data, byte[] key) throws Exception{

SecretKey secretKey = new SecretKeySpec(key, "DES");

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, secretKey);

byte[] cipherBytes = cipher.doFinal(data);

return cipherBytes;

}

/*

* DES 解密

*/

public static byte[] decrypt(byte[] data, byte[] key) throws Exception{

SecretKey secretKey = new SecretKeySpec(key, "DES");

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.DECRYPT_MODE, secretKey);

byte[] plainBytes = cipher.doFinal(data);

return plainBytes;

}

//Test

public static void main(String[] args) throws Exception {

byte[] desKey = DESUtil.initKey();

System.out.println("DES KEY : " + BytesToHex.fromBytesToHex(desKey));

byte[] desResult = DESUtil.encrypt(DATA.getBytes(), desKey);

System.out.println(DATA + ">>>DES 加密结果>>>" + BytesToHex.fromBytesToHex(desResult));

byte[] desPlain = DESUtil.decrypt(desResult, desKey);

System.out.println(DATA + ">>>DES 解密结果>>>" + new String(desPlain));

}

}

java des3加密_JAVA加密算法(3)- 对称加密算法(DES、3DES、AES)相关推荐

  1. java aes256 加密_java Aes256 加密算法的实现

    如果希望进行AES256位的加密解密,需要事先从java官网下载 local_policy.jar与US_export_policy.jar替换%JAVA_HOME%/jre/lib/security ...

  2. java加密算法之对称加密算法AES

    先上效果图 源码 package com.symmetric.aes.util;import org.apache.commons.codec.binary.Hex; import org.apach ...

  3. java des3加密解密算法 ,crc加解密

    //des3加密private static final String Algorithm = "DESede"; // 定义 加密算法,可用private static byte ...

  4. java如何加密_Java如何实现密码加密

    在查询时,我们如果要对用户的登录信息进行加密,通常会将其密码进行加密. 1) 可以借助spring框架工具类DigestUtils 2) 也可以使用shiro框架来实现 //保存用户自身信息 //1构 ...

  5. java aes256 加密_JAVA中使用AES256加密

    前言:java默认支持128位加密规范,如果想支持256位加密规范,就需要使用无限制JCE策略文件,而现在Android端AES256的加密填充方式一般是PKCS7Padding,JAVA支持PKCS ...

  6. java string 加密_java字符串加密解密

    java字符串加密解密 try { String test = "123456789@fdj.com"; EncryptionDecryption des = new Encryp ...

  7. DES/3DES/AES加密及区别

    DES 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption Standard) . 目前在国内,随着三金工程尤其是金卡工程的 ...

  8. java的rsa加密_java实现的RSA加密算法详解

    本文实例讲述了java实现的RSA加密算法.分享给大家供大家参考,具体如下: 一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥 公钥:可 ...

  9. java aes对称加密算法_JavaAES128对称加密算法实现

    在我们程序员日常工作中避免不了会接触一下有关于加密算法的需求,所以今天小编带来的是java中AES128对称算法的实现. 话不多少接下来代码搞起来-----> 0.准备 首先呢,我们先把jar包 ...

最新文章

  1. 为什么用了索引之后,查询就会变快?
  2. IPSec 之 Server2003Cisco路由器(1)
  3. 简单js特效代码大全_Django 功法大全
  4. WinForm界面开发之 启动界面
  5. tensorflow神经网络拟合非线性函数与操作指南
  6. python 单例模式的四种创建方式
  7. 微信电脑客户端_无聊的话,用微信玩玩电脑
  8. OCA第1部分中的Java难题
  9. linux 的 df命令:显示磁盘分区上的可用空间
  10. flex java 上传下载_完整的Flex多文件上传实例
  11. Web MIDI API W3C
  12. L1-062 幸运彩票 (15 分)
  13. 转:性能测试常见术语
  14. 打印机用word打文档时在背面打印
  15. SlickEdit 之缘起
  16. 单片机c语言直接寻址 间接寻址,pic单片机教程之数据存储器的直接间接寻址方式...
  17. ERROR Error validating install location: Distro ‘rhe17‘ does not exist in our dictionary
  18. 说话人识别(speaker Recognition/Verification)简介
  19. php 中日期时间函数大全,PHP 中日期时间函数 date() 用法总结
  20. 把win7电脑变成无线路由器

热门文章

  1. Apache RocketMQ 深圳沙龙报名开启!
  2. 2021天猫双11:阿里巴巴业务已全部跑在阿里云上
  3. 8 种架构设计模式优缺点大曝光 | 原力计划
  4. 互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...
  5. lamp mysql位置_linux查看 LAMP环境安装路径
  6. rocketmq怎么保证数据不会重复_RocketMQ保证信息有序性和防止重复
  7. oracle证书洛阳,ORACLE手工建库
  8. PHP读取qq群成员,js获取QQ群成员的经典代码
  9. Vue Bootstrap 静态服务器 实现文件追加上传、断点续传、极速秒传
  10. data.name.toLowerCase() is not a function问题