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,一经查实,立即删除!

相关文章

Python 并行分布式框架 Celery

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

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

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

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

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

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

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

利用 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;来次课外活动吧”的神奇邀请函打消了所有人的怀疑。根据从…

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

来源&#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 请问如何从头…

生命起源之谜: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; 账务管理系统(个人版)演示 图的右下角的框架就…

2018年聊天机器人状态报告

来源&#xff1a; 199IT互联网数据中心根据Drift、SurveyMonkey Audience、Salesforce和myclever的“2018年聊天机器人状态报告”&#xff0c;聊天机器人预计能够24小时为简单任务提供即时服务&#xff0c;但不是进行复杂查询的最佳渠道。聊天机器人尚未在消费者中找到广泛的吸…

PHP、MySQL 注入

Welcome to the NetSPI SQL Injection Wiki&#xff1a;https://sqlwiki.netspi.com/ 因为需要了解下 SQL 注入&#xff0c;就使用 PHP 自己写了一个只有一个网页的网站测试下&#xff0c;现在记录下过程。。。 直接使用的 KALI系统 (KALI官网&#xff1a;Kali Linux | Penetr…

争自动驾驶领头羊还是确保技术安全?欧美选择不同

来源&#xff1a;发掘新视界摘要&#xff1a;对于那些未知或有潜在危险的技术&#xff0c;欧洲更倾向于保护民众&#xff0c;而非是引领创新与进步。自优步自动驾驶汽车致人死亡事件发生之后&#xff0c;欧洲与美国对于技术的态度差异再度凸显&#xff0c;欧洲更倾向于加强监管…

菜鸟教程 之 JavaScript 教程

From&#xff1a;菜鸟教程 JavaScript&#xff1a;https://www.runoob.com/ W3School JavaScript 教程&#xff1a;http://www.w3school.com.cn/js/index.asp https://www.w3cschool.cn/javascript/ 廖雪峰官网 JavaScript 教程&#xff1a;https://www.liaoxuefeng.com/w…

关于Actionscript 3中给Flash传参数方法(一)

关于Actionscript 3中给Flash传参数方法&#xff08;一&#xff09; 今天在测试一个为Audi做Flash AD的时候&#xff0c;发现Audi提供的clicktag是Actionscript 2的代码&#xff0c;在Actionscript 3中是不被支持的&#xff0c;所以有去翻了Adobe Docs了。 在2.0中的clicktag代…

深度睡眠中,记忆如何被保持?

来源 &#xff1a;脑与智能丨公众号摘要&#xff1a;深度睡眠对记忆的巩固至关重要&#xff0c;与健康的睡眠相比&#xff0c;失眠会导致记忆力下降。深度睡眠中的慢波分为下降状态&#xff08;down state&#xff09;和上升状态&#xff08;up state&#xff09;&#xff0c;在…