博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA使用DES加密算法加密解密
阅读量:7009 次
发布时间:2019-06-28

本文共 2048 字,大约阅读时间需要 6 分钟。

程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数

一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码

properties文件全是unicode编码明文存储,程序打包交付后,其他人能够很容易使用解压软件打开jar查看你的.properties文件

所以一些敏感变量需要加密处理

首先需要了解一些基本的加密算法,比如MD5,比如DES和RSA

 

MD5是一种不可逆的加密算法,使用散列后特征码的方式表现需要加密的字符或者文件,常用在系统登陆的密码比对中

将MD5码存储在数据库中,用户登陆时将用户输入的字符散列成MD5后于数据库中的密文进行比对

不可逆的加密算法有一种好处就是,即使后台数据库被攻破了,对方拿这些MD5散列密文也毫无办法求得明文

 

DES和RSA都是可逆的加密算法,也就是可以通过密钥和密文解开得到明文,其中最常见的64位轮转DES算法

在JAVA的JDK中提供了先天性的良好的加密支持,其中就包括大名鼎鼎的DES

下面一个DESHelper类展示了如何将密文解开得到明文的方法

package com.newflypig.des;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import sun.misc.BASE64Decoder;/** * 处理数据库密码的密文转明文类 *	@author newflypig *	time:2015年10月30日 *	TODO  * */public class DESHelper {	/**     * Description 根据键值进行解密     * @param data     * @param key  加密键byte数组     * @return     * @throws Exception     */    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {        // 生成一个可信任的随机数源        SecureRandom sr = new SecureRandom();         // 从原始密钥数据创建DESKeySpec对象        DESKeySpec dks = new DESKeySpec(key);         // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");        SecretKey securekey = keyFactory.generateSecret(dks);         // Cipher对象实际完成解密操作        Cipher cipher = Cipher.getInstance("DES");         // 用密钥初始化Cipher对象        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);         return cipher.doFinal(data);    }	public static String decrypt(String data, String key) throws Exception {		if (data == null)			return null;		BASE64Decoder decoder = new BASE64Decoder();		byte[] buf = decoder.decodeBuffer(data);		byte[] bt = decrypt(buf, key.getBytes());		return new String(bt);	}}

如需对加密算法有更深刻的了解,可以自行研究实现原理,对于敏捷开发这里只需要不求甚解的运用就行了,记得保护好你的key也就是密钥

一开始提到的需要将properties文件中的参数解开得到明文,想必你应该已经知道该使用哪种加密算法了吧

对了,就是上面的DES加密算法,这里只提供了解密,因为不需要在程序中提供加密函数

各位可以自己编写自己的加密函数,或者可以在自己的JUnit测试里面写加密的语句用来对数据库密码进行加密。

转载于:https://www.cnblogs.com/newflydd/p/4946220.html

你可能感兴趣的文章
Timus Online Judge 1057. Amount of Degrees(数位dp)
查看>>
jquery中关于表格行的增删问题
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>
GUI进化--数据与界面分离
查看>>
三级菜单实例
查看>>
Teleport Pro使用教程
查看>>
C# 如何生成CHM帮助文件
查看>>
Java编程的逻辑 (93) - 函数式数据处理 (下)
查看>>
一对多多对多的建表原则
查看>>
Maven详解(四)------ 常用的Maven命令
查看>>
可视化之Berkeley Earth
查看>>
线性表的顺序存储结构之顺序表类的实现_Java
查看>>
Hadoop的namenode的管理机制,工作机制和datanode的工作原理
查看>>
AX88772B 驱动移植
查看>>
array
查看>>
背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
查看>>
[转]Repeat Page Header on each Page for reports SSRS
查看>>
一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
查看>>
Python操作SQLAlchemy之连表操作
查看>>
什么是架构师?
查看>>