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

对称加密算法概念

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

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

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

常用对称加密算法

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

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android jni 调用java对象_Android NDK开发之Jni调用Java对象

本地代码中使用Java对象通过使用合适的JNI函数,你可以创建Java对象,get、set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数。JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须…

docker 容器端口访问不到_docker容器无法访问宿主机端口的解决

最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。 操作如下: firewall-cmd --permanent --zone=trusted --change-interface=docker0 firewall-cmd…

java public权限_Java public 访问权限

Java public 访问权限接下来,我们准备为大家介绍“public 访问权限”。在前面的学习中,我们已经接触过public这个关键字,就是在入口方法 main的前面,现在我们可以来回顾一下对应的代码:public class MyTest{publicstat…

java timer线程结束_Java线程Timer定时器用法详细总结

定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联。Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类。TimerTask类是一个抽象类。执行任务的时间晚于当前时间…

java在创建对象时必须_Java中5种创建对象的方式

以下是一些在Java中创建对象的方法:1、 使用new关键字使用new关键字是创建对象的最基本方法。这是在java中创建对象的最常见方法。几乎99%的对象都是这样创建的。通过使用这个方法,我们可以调用我们想要调用的任何构造函数(无参数或参数化构造函数)。//J…

java类的定义的实例_Java中类的定义和初始化示例详解

类的定义类的定义格式//创建类class classname{field ;//成员属性/字段method;//方法}class为定义类的关键字,classname为类的名字,{ }为类的主体;例如:class person{public string name ; //成员属性publi…

java 多线程池_Java ThreadPoolExecutor线程池 同时执行50个线程

最近项目上有个需求,需要从FTP服务器中下载大批量的数据文件,然后解析该数据文件进行入库,数据库为oracle,最后在通过web工程,以报表和图表的形式进行展现。这些批量的数据文件为纯文本文件,每天产生数据文…

java and dsl_Groovy语法糖以及DSL

前言Why初次接触到Groovy是在实习中接触到一个 纯Groovy写的项目,当时看了下这不就是没有分号的Java么,而且也是有年纪的语言了,并不想投入时间学习。后来工作中越来越多的看到Groovy的身影,Gradle,Spring Cloud Contr…

java序列化的方法_【Java常见序列化与反序列方法总结】

人和电脑在很多方面都是十分相似的,大脑可以看成电脑主机,五官/身体等表面器官就是显示器、鼠标等外设。这篇文章就是想把计算机跟人做类比YY一下序列化和反序列化的机制、用途。如果你是初学者,心里肯定会问究竟什么是序列化/反序列化&#…

python的编码模块char_关于sqlmap当中tamper脚本编码绕过原理的一些总结(学习python没多久有些地方肯定理解有些小问题)...

sqlmap中tamper脚本分析编写置十对一些编码实现的脚本,很多sqlmap里面需要引用的无法实现,所以有一部分例如keywords就只写写了几个引用了一下,其实这里很多脚本运用是可以绕过安全狗的。本人也是刚开始学习python没多久,有一些错…

java的多态怎么理解_JAVA多态的理解

面向对象的三大特性:封装、继承、多态,其中最难理解的就是多态以下是网上某大神给的一个例子:1.继承关系class A {public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}}clas…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列,从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java规定日期格式输出_Java格式化输出日期百分比时间等

Java格式化输出Java的格式化输出等同于String.Format,与C有很大的相似,比如System.out.printf(“%8.2f”, x);在printf中,可以使用多个参数,例如:System.out.printf(“Hello, %s. Next year, you’ll be %d”, name, a…

java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

java程序设计基础教程第六章图形用户界面编辑.docx还剩27页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点…

c盘java文件误删_java获取C盘下的隐藏目录文件名称

题记—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。网易云课堂在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传…

对java这门课程的认识_关于java课程的总结

前言本次博客主要内容为此次三次作业的总结,整门java课程学习的总结,以及在此次java课程中的收获,和对课程的意见。作业过程总结第一次作业主要考察的是对程序的可扩展性,实现开闭原则非常重要,因为程序随着时间&#…

linux php和java环境变量配置_Linux下配置Java环境变量

一般来说,我们都会把Java安装到 /usr/local 目录 或者 /opt 目录下。这里假设java安装包已解压在了 /opt下,具体目录为:/opt/java8/java1.8.0_45目录(注意:如果是生产环境中,一定要root用户来安装配置)。下面我们来配置…

java多线程多态_Java学习之多线程

多线程:(一)进程与线程进程特点并发与并行的区别:多线程编程的好处:(二)多线程的建立1,通过继承Thread类,代码如下:class MyThread extendsThread {private static int K 10;//类共享变量private int M10;…

java 执行存储过程报语法错误_为什么我在批处理从Java上执行PostgreSQL上的存储过程时收到错误通知“结果不合理”?...

我在数据库中有这个过程:CREATE OR REPLACE FUNCTION replacePageRelevance(id INT, value REAL) RETURNS VOID AS $$BEGININSERT INTO pageRelevance VALUES (id,value);EXCEPTION WHEN unique_violation THENUPDATE pageRelevance SET relevance value WHERE pag…