DES算法和DESede算法统称DES系列算法。DES算法是对称加密算法领域中的典型算法,为后续对称加密算法的发展奠定了坚实的基础。但是DES算法密钥偏短,仅有56位,迭代次数偏少,受到诸如查分密码分析和线性密码分析等各种攻击威胁,安全性受到严重威胁。不仅如此,由于DES算法具有半公开性质,被怀疑存在美国国家安全局安置的后门,受到各大密码学机构的强烈质疑。以后的文章中会具体描述一下AES算法。

  生产密钥,对数据加密、解密

 package test;

 import java.security.Key;

 import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec; /**
* DES安全编码组件
*/
public abstract class DESCoder {
/**
* 密钥算法
* java 7只支持56位密钥
* Bouncy Castle 支持64位密钥
*/
public static final String KEY_ALGORITHM = "DES";
/**
* 加密/解密算法 /工作模式/填充方式
*/
public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";
/**
* 转换密钥
* @param key 二进制密钥
* @return key 密钥
* @throws Exception
*/
private static Key toKey(byte[] key) throws Exception{
//实例化DES密钥材料
DESKeySpec dks = new DESKeySpec(key);
//实例化密钥工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
//生产密钥
SecretKey secretKey = keyFactory.generateSecret(dks);
return secretKey;
}
/**
* 解密
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密数据
* @throws Exception
*/
public static byte[] decrypt(byte[] data,byte[] key) throws Exception{
//还原密钥
Key k = toKey(key);
//实例化
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);
//实例化
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
//初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE,k);
//执行操作
return cipher.doFinal(data);
}
/**
* 生产密钥
* java 7只支持56位 密钥
* Bouncy Castle 支持64位密钥
* @return byte[] 二进制密钥
* @throws Exception
*/
public static byte[] initKey() throws Exception{
/*
* 实例化密钥生成器
* 若要使用64位密钥注意替换
* 讲下述代码中的
* KeyGenerator.getInstance(KEY_ALGORITHM);
* 替换为
* KeyGenerator.getInstance(KEY_ALGORITHM,"BC");
*/
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
/*
* 初始化密钥生成器
* 若要使用64位密钥注意替换
* 将下述的代码 kg.init(56);
* 替换为 kg.init(64);
*/
kg.init(56);
//生成密钥
SecretKey secretKey = kg.generateKey();
//获得密钥的二进制编码形式
return secretKey.getEncoded();
}
}

单元测试:引入了三个包 commons-codec-1.9.jar    引入Base64.encodeBase64String(inputData)方法

            junit-4.11.jar  hamcrest-core-1.3.jar 进行单元测试

 package test;

 import org.apache.commons.codec.binary.Base64;
import org.junit.Test; public class DESCoderTest {
@Test
public void test() throws Exception{
String inputStr = "DES";
byte[] inputData = inputStr.getBytes();
System.out.println("原文:\t" + inputStr);
//初始化密钥
byte[] key = DESCoder.initKey();
System.out.println("密钥:\t" + Base64.encodeBase64String(key));
//加密
inputData = DESCoder.encrypt(inputData, key);
System.out.println("加密后:\t" + Base64.encodeBase64String(inputData));
//解密
byte[] outputDate = DESCoder.decrypt(inputData, key);
String outoutStr = new String(outputDate);
System.out.println("解密后:\t" + outoutStr);
}
}

输出:  

  原文: DES
  密钥: x8TN3Ku8/iM=
  加密后: lOAZ+WcFAEU=
  解密后: DES

数据加密标准——DES的更多相关文章

  1. 数据加密标准(DES)详解

    1 简介 1.1 历史 DES(Data Encryption Standard)是由IBM公司在1974年提出的加密算法,在1977年被NIST定位数据加密标准.随后的很多年里,DES都是最流行的对 ...

  2. Android数据加密之Des加密

    前言: 端午节前有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...

  3. AES--高级数据加密标准

    AES--高级数据加密标准 对称密码体制的发展趋势将以分组密码为重点.分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成.密钥扩展算法将b字节用户主密钥扩展成r个子密钥.加密算法由一个密码学上 ...

  4. DES(Data Encryption Standard)数据加密标准

    DES算法入口参数 DES算法的入口参数有三个:Key.Data.Mode.其中Key为7个字节共56位,是DES算法的工作密钥.Data为8个字节64位,是要被加密或解密的数据;Mode为DES的工 ...

  5. 数据加密之DES加密

    DES加密即使用DESCryptoServiceProvider加密.DESCryptoServiceProvider在命名空间下:System.Security.Cryptography; 对称加密 ...

  6. DES原理

    1.DES的描述 为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS于1973年5月和1974年8月两次发布通告,向社会征求密码算法.在征得的算法中,由IBM公司提出的算法lucifer ...

  7. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

  8. 对称加密算法 ~ Des

    一.对称加密 (Symmetric Key Encryption)  对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret ...

  9. asp.net DES加密解密

    数据加密标准DES加密算法是一种对称加密算法,DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中 ...

随机推荐

  1. apache代理服务器为nodejs服务设置域名

    本机以apache为主,其中 在httpd.conf中先设置 <VirtualHost *:80> ServerName nodejs.cc ServerAlias www.nodejs. ...

  2. What technical details should a programmer of a web application consider before making the site public?

    What things should a programmer implementing the technical details of a web application consider bef ...

  3. RemotelyAnywhere 11.0.2716 SERVER EDITION 绿色破解安装版

    RemotelyAnywhere是一个小巧的,利用浏览器进行远程控制的小程序.只要在服务器端安装该软件,然后你就可以通过任何一个支持 Java 的浏览器对远程计算机进行控制了.通过它,你可以管理远程计 ...

  4. NOIP2016普及组复赛解题报告

    提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:h ...

  5. 。i节点

    http://blog.csdn.net/feiyinzilgd/article/details/5609157  linux中,文件查找不是通过文件名称来查找的.实际上是通过i节点来实现文件的查找定 ...

  6. 谈谈Memcached与Redis

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...

  7. 巧用CSS3伪类选择器自定义checkbox和radio的样式

    由于原生的checkbox和radio的样式太简陋了,在设计页面的时候,设计师往往会设计自己的checkbox和radio样式.一半情况下,为了适应各个浏览器的兼容性,我们都会用其他的元素替代原生的c ...

  8. get传中文参数乱码解决方法

    通常我们前端不同页面之间传参数用得最多的方法就是get方法:在url后面加上参数.例如:www.test.com?id=1&name=hello. 英文和字母很好处理,但是如果有的参数值为中文 ...

  9. Scrum Meeting 13-20151221

    任务安排 姓名 今日任务 明日任务 困难 董元财 无(数据库) 网络连接框架优化 无 胡亚坤 无(数据库) 优化商品搜索 无 刘猛 无 无 马汉虎 无 无 赖彦俞 无 无 燃尽图 团队照片 暂无 代码 ...

  10. 个人博客作业Week2

    一.是否需要有代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我反驳这个观点,这些规范是成千上万的程序员在开发程序中总结出来的代码规范,他有助于我们的开 ...