您的位置:首页 > 编程语言 > Java开发

DES加密和解密的JAVA实现方式

2017-03-09 00:00 399 查看
摘要: DES 全称为Data Encryption Standard即数据加密算法,它是IBM公司研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为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;
import sun.misc.BASE64Encoder;

/**
* @author tangx
* 测试des的加密与解密
*/
public class TestDES {

public static void main(String[] args) {
// TODO Auto-generated method stub
String source  = "测试des加密";
String key = "123456781";
String result = encrypt(source, key);
//加密结果
System.out.println(result);
//解密
System.out.println(decrypt(result, key));
}

/**
* DES加密操作
* @param source 要加密的源
* @param key    约定的密钥
* @return
*/
public static String encrypt(String source,String key){
//强加密随机数生成器
SecureRandom random = new SecureRandom();
try {
//创建密钥规则
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
//创建密钥工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
//按照密钥规则生成密钥
SecretKey secretKey =  keyFactory.generateSecret(keySpec);
//加密对象
Cipher cipher = Cipher.getInstance("DES");
//初始化加密对象需要的属性
cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
//开始加密
byte[] result = cipher.doFinal(source.getBytes());
//Base64加密
return  new BASE64Encoder().encode(result) ;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param cryptograph 密文
* @param key         约定的密钥
* @return
*/
public static String decrypt(String cryptograph,String key){
//强加密随机生成器
SecureRandom random  =  new SecureRandom();
try {
//定义私钥规则
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
//定义密钥工厂
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
//按照密钥规则生成密钥
SecretKey secretkey = factory.generateSecret(keySpec);
//创建加密对象
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, secretkey, random);
//Base64对
byte[] result = new BASE64Decoder().decodeBuffer(cryptograph);
return new String(cipher.doFinal(result));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}


测试结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DES加密 解密