java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

Java使用3DES加密解密的流程

fbe5235aee371da36a03d6c3e3e3661f.png

①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象

SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);

②根据算法实例化Cipher对象。它负责加密/解密

Cipher c1 = Cipher.getInstance(Algorithm);

③传入加密/解密模式以及SecretKey密钥对象,实例化Cipher对象

c1.init(Cipher.ENCRYPT_MODE, deskey);

④传入字节数组,调用Cipher.doFinal()方法,实现加密/解密,并返回一个byte字节数组

c1.doFinal(src);

3DES案例

—SecretUtils.java(3DES加密解密的工具类)—

package my3des;

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**

* SecretUtils {3DES加密解密的工具类 }

* @author William

* @date 2013-04-19

*/

public class SecretUtils {

//定义加密算法,有DES、DESede(即3DES)、Blowfish

private static final String Algorithm = “DESede”;

private static final String PASSWORD_CRYPT_KEY = “2012PinganVitality075522628888ForShenZhenBelter075561869839”;

/**

* 加密方法

* @param src 源数据的字节数组

* @return

*/

public static byte[] encryptMode(byte[] src) {

try {

SecretKey deskey = new SecretKeySpec(build3DesKey(PASSWORD_CRYPT_KEY), Algorithm); //生成密钥

Cipher c1 = Cipher.getInstance(Algorithm); //实例化负责加密/解密的Cipher工具类

c1.init(Cipher.ENCRYPT_MODE, deskey); //初始化为加密模式

return c1.doFinal(src);

} catch (java.security.NoSuchAlgorithmException e1) {

e1.printStackTrace();

} catch (javax.crypto.NoSuchPaddingException e2) {

e2.printStackTrace();

} catch (java.lang.Exception e3) {

e3.printStackTrace();

}

return null;

}

/**

* 解密函数

* @param src 密文的字节数组

* @return

*/

public static byte[] decryptMode(byte[] src) {

try {

SecretKey deskey = new SecretKeySpec(build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE, deskey); //初始化为解密模式

return c1.doFinal(src);

} catch (java.security.NoSuchAlgorithmException e1) {

e1.printStackTrace();

} catch (javax.crypto.NoSuchPaddingException e2) {

e2.printStackTrace();

} catch (java.lang.Exception e3) {

e3.printStackTrace();

}

return null;

}

/*

* 根据字符串生成密钥字节数组

* @param keyStr 密钥字符串

* @return

* @throws UnsupportedEncodingException

*/

public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException{

byte[] key = new byte[24]; //声明一个24位的字节数组,默认里面都是0

byte[] temp = keyStr.getBytes(“UTF-8”); //将字符串转成字节数组

/*

77 * 执行数组拷贝

* System.arraycopy(源数组,从源数组哪里开始拷贝,目标数组,拷贝多少位)

*/

if(key.length 》 temp.length){

//如果temp不够24位,则拷贝temp数组整个长度的内容到key数组中

System.arraycopy(temp, 0, key, 0, temp.length);

}else{

//如果temp大于24位,则拷贝temp数组24个长度的内容到key数组中

System.arraycopy(temp, 0, key, 0, key.length);

}

return key;

}

}

—Main.java(测试类)—

package my3des;

public class Main {

/**

* @param args

*/

public static void main(String[] args) {

String msg = “3DES加密解密案例”;

System.out.println(“【加密前】:” + msg);

//加密

byte[] secretArr = SecretUtils.encryptMode(msg.getBytes());

System.out.println(“【加密后】:” + new String(secretArr));

//解密

byte[] myMsgArr = SecretUtils.decryptMode(secretArr);

System.out.println(“【解密后】:” + new String(myMsgArr));

}

}

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

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

相关文章

解决spring和struts配合问题

最近因为做weboa系统,我采用了strutsspringhibernate的整体架构,我按照目前网上流行的这方面的配置文件在web.xml中加入了: <param-name>contextconfiglocation</param-name> 【程序编程相关:struts中配置过滤文件&#xff01;】 <context-param> 【推荐阅…

Python 并行分布式框架 Celery

Celery 官网&#xff1a;http://www.celeryproject.org Celery 官方文档英文版&#xff1a;http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版&#xff1a;http://docs.jinkan.org/docs/celery celery配置&#xff1a;http://docs.jinkan.org/docs/c…

java判断是否是路径_java判断是否是目录

java判断是否是目录&#xff1a;/*** 创建目录** param path*/public static void CreatFileDir(String path) {try {File file new File(path);if(file.getParentFile().isDirectory()){//判断上级目录是否是目录if(!file.exists()){ //如果文件目录不存在file.mkdirs(); //创…

中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会

作者&#xff1a; 张驰2018年3月25日上午举办的第10届2018中国&#xff08;深圳&#xff09;IT领袖峰会上&#xff0c;腾讯公司董事会主席兼首席执行官发表了 “数字中国的机遇与探索” 主题演讲。在演讲中表示&#xff0c;不管什么产业都是需要科技来对它进行改造升级、转型。…

Java加密与解密的艺术~安全协议~双向认证服务

双向认证服务 1、准备工作 A、证书导入 导入ca.p12 导入client.p12 B、服务器配置 <Connectorport"443"SSLEnabled"true"clientAuth"true"maxThreads"150"protocol"HTTP/1.1"scheme"https"sec…

DataBinder.Eval的基本格式 效率 比较

<%#eval%>是单方向的资料连接 <%#bind%> 双方向的资料连接 <%#eval%>是只读的,你看到的那些无法更新数据的数据显示控件,可以用这个 <%#bind%> 不但可读,而且可写,那些可更新数据库的数据绑定控件,用这个 <%# DataBinder.Eval(Container.DataItem,&…

利用 Celery 构建 Web 服务的后台任务调度模块

来源&#xff1a;http://www.tuicool.com/articles/Enaeymm 任务队列在 Web 服务里的应用 在 Web2.0 后的时代&#xff0c;社交网站、搜索引擎的的迅猛发展对 Web 服务的后台管理系统提出了更高的需求。考虑几个常见的使用场景&#xff1a; 社交网站的用户在其主页发布了一组新…

java元素符号是什么_Java 代码中 @ 符号是什么意思?

展开全部annotation。Annotation&#xff0c;是Java5的新特性&#xff0c;下面是Sun的Tutorial的描述&#xff0c;因为是英文&#xff0c;这里我翻译下&#xff0c;希望能够比较清晰32313133353236313431303231363533e58685e5aeb931333264633435的描述一下Annotation的语法以及…

风景这边独好的AI大年,百度亚马逊等巨头第一季度成绩单怎么样?

苹果春季新品发布会邀请函来源&#xff1a;遇见人工智能该来的还是来了&#xff0c;但是那又如何&#xff1f;这句话是送给苹果的。本以为这个季度不会再有新品发布的苹果&#xff0c;却用一张主打“同学们&#xff0c;来次课外活动吧”的神奇邀请函打消了所有人的怀疑。根据从…

Java加密与解密的艺术~数字证书~证书使用openssl

证书工具 /*** 2009-5-20*/ package org.zlex.chapter10_2;import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.cert.Certificate; i…

Run-time system与虚拟机

Run-time system与虚拟机 一个Run-time系统&#xff0c;由一个执行引擎&#xff08;Execution Engine&#xff09;、一个机器级的调试器&#xff08;Debugger&#xff09;、一个汇编器&#xff08;Assembler&#xff09;和与之配套的开发工具&#xff08;Tools&#xff09;组成…

最近火了的自动驾驶全球产业链全景图

来源&#xff1a;传感器技术摘要&#xff1a;目前自动驾驶已经发展的很快&#xff0c;除了特斯拉和奥迪以外&#xff0c;很多豪车都引进了自动驾驶技术。下面来盘点一下自动驾驶产业链&#xff1a;首先看一下自动驾驶的等级标准&#xff1a;1、英特尔&#xff1a;Mobileye Alt…

java get set 注解_java技能提升,用Lombok甩掉get和set,让代码变得更简洁

前言前几天有个新来的同事(实习生)惊讶的对我说&#xff1a;我们的代码里好多错误&#xff0c;我的程序本地都启动不了。我一脸懵逼的质问他&#xff1a;目前线上的代码&#xff0c;怎么会有问题吗&#xff1f;他不服气的说&#xff1a;你来看嘛&#xff0c;就是有问题&#xf…

.pfx 证书和 .cer 证书

证书系列&#xff1a; 1&#xff1a;.pfx 证书和 .cer 证书 2&#xff1a;导入pfx证书 通常情况下&#xff0c;作为文件形式存在的证书一般有三种格式&#xff1a; 第一种&#xff1a;带有私钥的证书&#xff0c;由Public Key Cryptography Standards #12&#xff0c;PKCS#1…

HTML5、CSS、CSS3、SCSS (SASS) 相关教程

1、HTML5 教程 W3School HTML5 教程&#xff1a;http://www.w3school.com.cn/html5/index.asp 菜鸟网站 HTML5教程&#xff1a;http://www.runoob.com/html/html5-intro.html 知乎 零基础如何迅速学习HTML&#xff1a;https://www.zhihu.com/question/27018083 请问如何从头…

连接查询_左连接/右连接/全连接的区别

介绍表连接&#xff0c;更确切的说是inner joins內连接&#xff0e; 內连接仅选出两张表中互相匹配的记录&#xff0e;因此&#xff0c;这会导致有时我们需要的记录没有包含进来。 为更好的理解这个概念&#xff0c;我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表…

java getclass 相等_java使用反射比较两个bean对象属性值是否相等

import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public class DomainEquals {/*** 日志操作类*/private static Logger logger Logger.getLogger(DomainEquals.class);publi…

生命起源之谜:RNA世界假说将迎来终结?

○ 流行的理论认为&#xff0c;生命起源于物质丰富的化学汤&#xff0c;而 RNA 是化学汤中最初的自我复制单元。但是&#xff0c;多肽和RNA混合起来或许会更高效。 | 图片来源&#xff1a;Novikov Aleksey来源&#xff1a;科学出版社 撰文&#xff1a;Jordana Cepelewicz 翻…

PHP 学习路线

PHP 官网文档(中文)&#xff1a;https://www.php.net/manual/zh/langref.php ThinkPhp (官方手册、入门教程)&#xff1a;https://sites.thinkphp.cn/1556331 ​W3School PHP 教程&#xff1a;http://www.w3school.com.cn/php/index.asp w3cschool (在线教程&技术文档)&am…

jQuery 对话框 jQuery.plugin

jQuery 对话框 jQuery.plugin 强烈推荐对话框插件jquery.weebox.js&#xff0c;本站开源账务管理系统中使用的对话框组件&#xff0c;各种形式的对话框&#xff1a;确认、成功、警告、错误等 ………… 如下图的右下角&#xff1a; 账务管理系统(个人版)演示 图的右下角的框架就…