DES加密介绍

      DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。

JAVA实现

加密

     代码有详细解释,不多废话。
     注意:DES加密和解密过程中,密钥长度都必须是8的倍数
  1. public byte[] desCrypto(byte[] datasource, String password) {
  2. try{
  3. SecureRandom random = new SecureRandom();
  4. DESKeySpec desKey = new DESKeySpec(password.getBytes());
  5. //创建一个密匙工厂,然后用它把DESKeySpec转换成
  6. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  7. SecretKey securekey = keyFactory.generateSecret(desKey);
  8. //Cipher对象实际完成加密操作
  9. Cipher cipher = Cipher.getInstance("DES");
  10. //用密匙初始化Cipher对象
  11. cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
  12. //现在,获取数据并加密
  13. //正式执行加密操作
  14. return cipher.doFinal(datasource);
  15. }catch(Throwable e){
  16. e.printStackTrace();
  17. }
  18. return null;
  19. }

解密

    代码有详细注释,不多废话
  1. private byte[] decrypt(byte[] src, String password) throws Exception {
  2. // DES算法要求有一个可信任的随机数源
  3. SecureRandom random = new SecureRandom();
  4. // 创建一个DESKeySpec对象
  5. DESKeySpec desKey = new DESKeySpec(password.getBytes());
  6. // 创建一个密匙工厂
  7. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  8. // 将DESKeySpec对象转换成SecretKey对象
  9. SecretKey securekey = keyFactory.generateSecret(desKey);
  10. // Cipher对象实际完成解密操作
  11. Cipher cipher = Cipher.getInstance("DES");
  12. // 用密匙初始化Cipher对象
  13. cipher.init(Cipher.DECRYPT_MODE, securekey, random);
  14. // 真正开始解密操作
  15. return cipher.doFinal(src);
  16. }

测试场景

      例如,我们可以利用如上函数对字符串进行加密解密,也可以对文件进行加密解密,如:
  1. //待加密内容
  2. String str = "测试内容";
  3. //密码,长度要是8的倍数
  4. String password = "12345678";
  5. byte[] result = DESCrypto.desCrypto(str.getBytes(),password);
  6. System.out.println("加密后内容为:"+new String(result));
  7. //直接将如上内容解密
  8. try {
  9. byte[] decryResult = des.decrypt(result, password);
  10. System.out.println("加密后内容为:"+new String(decryResult));
  11. } catch (Exception e1) {
  12. e1.printStackTrace();

JAVA实现DES加密的更多相关文章

  1. 一个java的DES加密解密类转换成C#

    一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...

  2. 兼容PHP和Java的des加密解密代码分享

    这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下 作为一个iOS工程师来解决安卓的问 ...

  3. JAVA实现DES加密实现详解

    package util; import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import javax.c ...

  4. C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现

    这里贴出来的是可通用的C#与jav的DES加密类,希望对大家管用直接复制即可用 C#DES加密解密类 ///<summary><![CDATA[加密解密帮助类]]></s ...

  5. java 实现 DES加密 解密算法

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

  6. java实现DES加密与解密,md5加密

    很多时候要对秘要进行持久化加密,此时的加密采用md5.采用对称加密的时候就采用DES方法了 import java.io.IOException; import java.security.Messa ...

  7. Android和java平台 DES加密解密互通程序及其不能互通的原因

    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通.就是加密的结果不一样 ...

  8. IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  9. JAVA的DES加密解密在windows上测试一切正常,在linux上异常

    windows上加解密正常,linux上加密正常,解密时发生 如下异常,异常信息如下: [ERROR] 2018-10-15 09:30:35,998 method:com.iscas.ippc.co ...

随机推荐

  1. HDU 5919 -- Sequence II (主席树)

    题意: 给一串数字,每个数字的位置是这个数第一次出现的位置. 每个询问对于序列的一个子区间,设一共有k个不同的数,求第ceil(k/2)个数的位置. 因为强制在线,所以离线乱搞pass掉. 主席树可解 ...

  2. Delimiter must not be alphanumeric or backslash 问题及解决

    Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in 正则表达 ...

  3. DB2 VALUES用法详解

    都知道Oracle有一个虚表(dual),我们可以用select sysdate from dual获取寄存器中的值.在DB2中,可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄 ...

  4. MongoDB的安装配置

    1,下载: http://www.mongodb.org/downloads 2.4.5版:http://www.mongodb.org/dr/fastdl.mongodb.org/linux/mon ...

  5. Dynamically loading an external JavaScript or CSS file

    原文:   Dynamically loading an external JavaScript or CSS file 通过javascript动态加载css文件和javascript文件,主要是通 ...

  6. 159. Longest Substring with At Most Two Distinct Characters

    最后更新 二刷 08-Jan-17 回头看了下一刷的,用的map,应该是int[256]的意思,后面没仔细看cuz whatever I was doing at that time.. wasnt ...

  7. C#学习笔记(二):继承、接口和抽象类

    继承 密封类 密封类(关键字sealed)是不允许其它类继承的,类似Java中的final关键字. public sealed class SealedClassName { //... } 初始化顺 ...

  8. Ext.tree.Panel Extjs 在表格中添加树结构,并实现节点移动功能

    最近在用Extjs 做后台管理系统,真的非常好用.总结的东西分享一下. 先展示一下效果图 好了,开始吧! 首先说一下我的创建结构: 一.构造内容 这个函数中包括store的创建,treePanel的创 ...

  9. UVA12219

    //by Rujia Liu /* 字符串的对比是缓慢的. 鉴于这道题最多只有四个小写字母, 也就是最多26*4种情况, 我们完全可以用整数来代替字符串. 一种比较简单的做法是把字符串看成一个四位的2 ...

  10. Python 3学习笔记2

    模块: 模块是一个包含Python代码的文本文件.使用import可以将模块导入到其他程序中. 每个模块都有自己的命名空间.主Python程序中的代码与一个名为__main__的明明空间关联.将代码放 ...