JAVA使用DES加密算法加密解密
程序中使用了.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测试里面写加密的语句用来对数据库密码进行加密。
JAVA使用DES加密算法加密解密的更多相关文章
- Java android DES+Base64加密解密
服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Ba ...
- SM4加密算法实现Java和C#相互加密解密
SM4加密算法实现Java和C#相互加密解密 近期由于项目需要使用SM4对数据进行加密,然后传给Java后台,Java后台使用的也是SM4的加密算法但是就是解密不正确,经过一步步调试发现Java中好多 ...
- PHP使用DES进行加密解密
DES是一种对称加密算法,也就是通过密文和合法的密钥能够将明文还原出来,在程序开发过程中有些 接口可能需要获取原始数据,而发送的数据又比较敏感(比如用户的密码等信息),这时可以选择DES加密算法,DE ...
- C# Java间进行RSA加密解密交互
原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...
- C# Java间进行RSA加密解密交互(二)
原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...
- C# Java间进行RSA加密解密交互(三)
原文:C# Java间进行RSA加密解密交互(三) 接着前面一篇C# Java间进行RSA加密解密交互(二)说吧,在上篇中为了实现 /** * RSA加密 * @param text--待加密的明文 ...
- Java语言实现 Base64 加密 & 解密
Java语言实现 Base64 加密 & 解密 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64 ...
- Java对称与非对称加密解密,AES与RSA
加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么 ...
- pyDes 实现 Python 版的 DES 对称加密/解密--转
https://my.oschina.net/leejun2005/blog/586451 手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓 ...
随机推荐
- Sqli-labs less 24
Less-24 Ps:本关可能会有朋友和我遇到一样的问题,登录成功以后没有修改密码的相关操作.此时造成问题的主要原因是logged-in.php文件不正确.可重新下载解压,解压过程中要主要要覆盖. 本 ...
- 【四】php字符串操作
1.trim函数,我们队trim函数并不陌生,用于去除字符串两头的空白符.php的trim方法也可以做到这一点,但是还可以使用第二个参数,用于规定你在两头去掉什么.php中还有 ltrim 和 rtr ...
- POJ 2891 Strange Way to Express Integers (解一元线性方程组)
求解一元线性同余方程组: x=ri(mod ai) i=1,2,...,k 解一元线性同余方程组的一般步骤:先求出前两个的解,即:x=r1(mod a1) 1x=r2(mod a2) ...
- Freebie: Material Design UI Kit
点这里 Following the guidelines laid out by Google, this free UI kit has been designed so that you can ...
- POJ 2027
#include<iostream> using namespace std; int main() { int time; cin>>time; int a; int b; ...
- com组件的注册
错误: 检索 COM 类工厂中 CLSID 为 {79AD7B73-C515-40B4-8B02-CB0F5FA5A1A8} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 ...
- UVA 11609 Teams 组合数学+快速幂
In a galaxy far far away there is an ancient game played among the planets. The specialty of the gam ...
- 为什么toString方法可以用来区分数组和对象?
首先大家都应该知道在javascript中只有是对象都存在toString方法,将调用该方法的值转换为字符串返回,如下: var arr = [1, 2, 3]; console.log(arr.to ...
- 叠罗汉I
叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上.同时我们应该让下面的人比上面的人更高一点.已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人.注意这里的人都 ...
- 2011 ACM/ICPC 成都赛区(为2013/10/20成都现场赛Fighting)
hdu 4111 Alice and Bob 博弈:http://www.cnblogs.com/XDJjy/p/3350014.html hdu 4112 Break the Chocolate ...