Java加密与解密的艺术~AES实现

AES算法成为DES算法的替代者,其实现也成为其他对称加密算法实现的参考模型。

 AES 实现

/*** 2009-10-5*/
package org.zlex.chapter07_3;import java.security.Key;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;/*** AES安全编码组件* * @author 梁栋* @version 1.0*/
public abstract class AESCoder {/*** 密钥算法*/public static final String KEY_ALGORITHM = "AES";/*** 加密/解密算法 / 工作模式 / 填充方式 * Java 6支持PKCS5Padding填充方式 * Bouncy Castle支持PKCS7Padding填充方式*/public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";/*** 转换密钥* * @param key 二进制密钥* @return Key 密钥* @throws Exception*/private static Key toKey(byte[] key) throws Exception {// 实例化AES密钥材料SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);return secretKey;}/*** 解密* * @param data 待解密数据* @param key 密钥* @return byte[] 解密数据* @throws Exception*/public static byte[] decrypt(byte[] data, byte[] key) throws Exception {// 还原密钥Key k = toKey(key);/** 实例化 * 使用PKCS7Padding填充方式,按如下方式实现 * Cipher.getInstance(CIPHER_ALGORITHM, "BC");*/Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);// 初始化,设置为解密模式cipher.init(Cipher.DECRYPT_MODE, k);// 执行操作return cipher.doFinal(data);}/*** 加密* * @param data 待加密数据* @param key 密钥* @return byte[] 加密数据* @throws Exception*/public static byte[] encrypt(byte[] data, byte[] key) throws Exception {// 还原密钥Key k = toKey(key);/** 实例化 * 使用PKCS7Padding填充方式,按如下方式实现* Cipher.getInstance(CIPHER_ALGORITHM, "BC");*/Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);// 初始化,设置为加密模式cipher.init(Cipher.ENCRYPT_MODE, k);// 执行操作return cipher.doFinal(data);}/*** 生成密钥 <br>* * @return byte[] 二进制密钥* @throws Exception*/public static byte[] initKey() throws Exception {// 实例化KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);/** AES 要求密钥长度为 128位、192位或 256位*/kg.init(256);// 生成秘密密钥SecretKey secretKey = kg.generateKey();// 获得密钥的二进制编码形式return secretKey.getEncoded();}
}

AES 用例

/*** 2008-6-11*/
package org.zlex.chapter07_3;import static org.junit.Assert.*;import org.apache.commons.codec.binary.Base64;
import org.junit.Test;/*** AES安全编码组件校验* * @author 梁栋* @version 1.0*/
public class AESCoderTest {/*** 测试* * @throws Exception*/@Testpublic final void test() throws Exception {String inputStr = "AES";byte[] inputData = inputStr.getBytes();System.err.println("原文:\t" + inputStr);// 初始化密钥byte[] key = AESCoder.initKey();System.err.println("密钥:\t" + Base64.encodeBase64String(key));// 加密inputData = AESCoder.encrypt(inputData, key);System.err.println("加密后:\t" + Base64.encodeBase64String(inputData));// 解密byte[] outputData = AESCoder.decrypt(inputData, key);String outputStr = new String(outputData);System.err.println("解密后:\t" + outputStr);// 校验assertEquals(inputStr, outputStr);}
}

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

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

相关文章

利用多核多线程进行程序优化

利用多核多线程进行程序优化2008 年 11 月 17 日 大家也许还记得 2005 年 3 月 C 大师 Herb Sutter 在 Dr.Dobb’s Journal 上发表了一篇名为《免费的午餐已经结束》的文章。文章指出&#xff1a;现在的程序员对效率、伸缩性、吞吐量等一系列性能指标相当忽视&#xff0c;很多性…

DOS 批处理

From: http://www.jb51.net/article/97204.htm From: http://www.92to.com/bangong/2016/04-08/2998914.html 百度文库&#xff1a;目前为止最全的批处理教程 批处理经典入门教程 批处理的本质&#xff0c;是一堆DOS命令按一定顺序排列而形成的集合。 批处理&#xff0c;也称…

python range 步长为负数_Python入门第7课,循环结构学习,for语句range函数的3种用法...

上课前&#xff0c;大陈带领学生们一起回顾和梳理前面学过的知识。体验课&#xff0c;Python与人工智能初体验。第1课&#xff0c;输出语句及赋值语句。第2课&#xff0c;输入语句学习。第3课、第4课&#xff0c;学习条件控制if语句。第5课、第6课&#xff0c;阶段练习及讲解。…

机器学习,就用Python!五大专家详解其优势何在

编译 &#xff1a;AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09;那么&#xff0c;为什么 Python 语言在机器学习领域会如此受欢迎&#xff1f;Python 领域资深专家 Mike Driscoll 组织了一次访谈会&#xff0c;邀请了五位 Python 专家和机器学习社区人士…

WinCE 5.0 virtual memory space

要深入了解WinCE的memory结构&#xff0c;就不得不在这里先画个virtual memory space的图。这个图是针对WinCE 5.0的。由于WinCE 6的结构做了很大变化&#xff0c;关于WinCE 6的内容将在以后介绍。 关于这个图的来源&#xff0c;有两点要说明。其一&#xff0c;绘制这个图的…

硬件安全 (1) —— SHA-1算法在FPGA上的实现

SHA-1 算法在FPGA上的实现 - 1 背景介绍 散列函数&#xff08;英语&#xff1a;Hash function&#xff09;又称散列算法、哈希函数&#xff0c;是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要&#xff0c;使得数据量变小&#xff0c;将数…

Java加密与解密的艺术~RSA模型分析

我们仍以甲乙两方收发消息为例。为完成加密消息传递&#xff0c;甲乙双方需要以下操作&#xff1a; 1&#xff09;、由消息发送方&#xff08;甲方&#xff09;构建密钥对。 2&#xff09;、由消息发送方&#xff08;甲方&#xff09;公布公钥至消息接收方&#xff08;乙方&…

区分关联、依赖和聚集关系

在建立对象模型时&#xff0c;很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时&#xff0c;对象A都有可能调用对象B的方法&#xff0c;这是三种关系之间的相同之处&#xff0c;除此之外&#xff0c;它们有着不同的特征。 1&#xff0e;依赖关…

MarkDown 语法手册

From: https://blog.csdn.net/witnessai1/article/details/52551362 From: http://www.jianshu.com/p/1e402922ee32/ 菜鸟教程&#xff1a;Markdown 教程&#xff1a;https://www.runoob.com/markdown/md-tutorial.html Markdown 语法手册&#xff1a;https://www.zybuluo.com…

硬件安全(1)—— SHA-1算法在FPGA上的实现-2

SHA-1算法在FPGA上的实现-2 在上一篇文章中&#xff0c;我详细介绍了SHA-1算法的计算过程。SHA-1算法主要由消息填充(Message Padding)和哈希计算(Hash Function Engine)两部分组成。消息块标准长度规定为512bits一组。消息填充在实现过程中需要区分长度不足一个消息块( < …

Mysql -uroot -p 登陆不上_mysql的登陆和退出命令格式

mysql登陆的命令格式为&#xff1a;mysql -h [hostip] -u [username] -p [password] [database]1.普通登陆mysql数据库命令格式&#xff1a;mysql -u 用户名 -p 密码&#xff0c;例如: mysql -u root -p root如果在-p后没有提供密码&#xff0c;则会在执行命令后要求用户输入密…

Java加密与解密的艺术~RSA实现

RSA 实现 /*** 2008-6-11*/ package org.zlex.chapter08_2;import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import …

IBM发布未来五年五大科技预测

来源&#xff1a;人工智能和大数据未来五年五大科技预测之AI偏见&#xff1a;AI 偏见将会爆发。但只有公正的 AI 才能生存。 5年之内&#xff0c;有偏见的AI系统和算法将不断增多&#xff0c;就像早前的计算机病毒增多一样。但我们将采取相应的应对措施&#xff0c;提出新的解决…

在Linux环境下使用C语言倒转字符串,输出错误的解决办法

项目场景&#xff1a; 学习在Linux环境下的C语言编程&#xff0c;利用GDB打Breakpoint&#xff0c;逐步调试Bug 问题描述 尝试将一个字符串倒转后输出&#xff0c;发现执行文件并没有正常的将倒转后的字符串输出。 源代码&#xff1a; #include <stdio.h>int main(voi…

“机器人之夜”看猎豹跑得快还是五款机器人价格降得快?“鸿门宴”正式上演

来源&#xff1a;机器人大讲堂3 月 21 日&#xff0c;猎豹移动&#xff08;NYSE: CMCM&#xff09;联合旗下人工智能公司猎户星空在北京水立方举行“猎豹3.21机器人之夜”发布会&#xff0c;发布自主研发的猎户机器人平台Orion OS&#xff0c;并推出五款全系列机器人产品&#…

mysql sysbench_详解MySQL基准测试和sysbench工具

一、基准测试简介1、什么是基准测试数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试与压力测试基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑&#xff0c;更加简单、直接、易于测试&#xff0c;数据可以由工具生成&…

windows 堆栈溢出简易测试代码

环境&#xff1a;windows xp sp2 vc 6.0 Code1#include <stdio.h> 2 3int fun2() 4{ 5 printf("-------------Get privilege!---------\n"); 6 getchar(); 7 return 0; 8} 910int fun1()11{12 int iRet 0;13 int *pRet &iRet;14 pRet…

数字电路中的Single-Bit跨时钟域设计

数字电路中的Single-Bit跨时钟域设计同步时钟&异步时钟的定义Metastable&#xff08;亚稳态&#xff09;Metastable的产生原因Setup / Hold Requirement的真正原因Metastable造成的问题跨时钟域同步设计跨时钟域处理目标Single-bit的Clock Domin Crossing (CDC) 电路Single…

《Nature》重磅 | 研究员利用机器学习发现近 6000 种未知病毒

作者&#xff1a;李雨晨《Nature》杂志近日发布消息称&#xff0c;研究人员利用人工智能发现了近6000种未知的病毒。这项工作是在3月15日由美国能源部(DOE)组织的一次会议上提出的&#xff0c;它展示了一种探索地球上巨大而未知的病毒多样性的新工具。从人类健康到垃圾降解&…

mysql limit to hosts matching_MySQL 用户访问限制 -- Host Match Limit

笔者前几日在做数据库迁移的时候&#xff0c;发现了一个挺有意思的小东西&#xff1a;数据库访问限制(Host Match limit),简单地翻阅了下给官方资料&#xff0c;发现这个东西应用场景其实非常广泛&#xff0c;只是我们采用了其他可能没有原生数据库带的Access Limit 功能好地方…