UDN-企业互联网技术人气社区

板块导航

浏览  : 3412
回复  : 33

[框架] MD5和DES加密算法

[复制链接]
厨子右边卫的头像 楼主
      
   下面是我对这个问题帖子的解答:什么时候用des 什么时候用md5


  1.DES是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。

  2.MD5采用的是散列算法,将任意大小的数据映射到一个较小的、固定长度的唯一值。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。

   3.MD5加密生成的密钥是固定的32位,DES加密,生成的密钥不是固定。现在假如要将用户登录的密码进行加密并存入数据库,MD5加密与DES加密相结合的方式是不错的选择。因为DES加密可逆,但是较之MD5难破解些,一般银行卡账户使用的就是这种算法;另外MD5生成固定的32位密钥,便于在数据库中存储,字段长度不变,不会浪费空间。
  
  延伸:代码实现一下,测试用例就不写了


1. MD5加密算法是单向加密,即加密的数据不能再通过解密还原。相关类包含在java.security.MessageDigest包中。


  1.     /**
  2.      * 基于MD5算法的单向加密
  3.      *
  4.      * @param strSrc
  5.      *            明文
  6.      * @return 返回密文
  7.      */
  8.     public static String encryptBasedMd5(String strSrc) {
  9.         String outString = null;
  10.         try {
  11.             MessageDigest md5 = MessageDigest.getInstance("MD5");
  12.             byte[] outByte = md5.digest(strSrc.getBytes("UTF-8"));
  13.             outString = outByte.toString();
  14.         } catch (Exception e) {
  15.             e.printStackTrace();
  16.         }
  17.         return outString;
  18.     }
复制代码





2. DES 加密算法是可逆的,解密方可以通过与加密方约定的密钥(契约)进行解密。相关类包含在javax.crypto.*包中
   
  1. <font size="3"> /**
  2.      * DES算法密钥
  3.      */
  4.     private static final byte[] DES_KEY = { 21, 1, -110, 82, -32, -85, -128, -65 };
  5.     /**
  6.      * 数据加密,算法(DES)
  7.      *
  8.      * @param data
  9.      *            要进行加密的数据
  10.      * @return 加密后的数据
  11.      */
  12.     public static String encryptBasedDes(String data) {
  13.         String encryptedData = null;
  14.         try {
  15.             // DES算法要求有一个可信任的随机数源
  16.             SecureRandom sr = new SecureRandom();
  17.             DESKeySpec deskey = new DESKeySpec(DES_KEY);
  18.             // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
  19.             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  20.             SecretKey key = keyFactory.generateSecret(deskey);
  21.             // 加密对象
  22.             Cipher cipher = Cipher.getInstance("DES");
  23.             cipher.init(Cipher.ENCRYPT_MODE, key, sr);
  24.             // 加密,并把字节数组编码成字符串
  25.             encryptedData = new sun.misc.BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
  26.         } catch (Exception e) {
  27.             log.error("加密错误,错误信息:", e);
  28.             throw new RuntimeException("加密错误,错误信息:", e);
  29.         }
  30.         return encryptedData;
  31.     }</font>
复制代码



相关帖子

发表于 2015-7-25 22:34:12 | 显示全部楼层

回帖奖励 +10

MD5一样能破
使用道具 举报

回复

发表于 2015-8-15 01:58:15 | 显示全部楼层
楼底做穿
使用道具 举报

回复

发表于 2015-8-15 02:25:04 | 显示全部楼层
呵呵。。。。。。。。。。。。。
使用道具 举报

回复

发表于 2015-8-15 03:37:59 | 显示全部楼层
来逛逛,:lol
使用道具 举报

回复

发表于 2015-8-15 04:14:16 | 显示全部楼层
看看、、为嘛非要回复
使用道具 举报

回复

发表于 2015-8-15 04:50:55 | 显示全部楼层
先回帖 再看看
使用道具 举报

回复

发表于 2015-8-15 05:28:06 | 显示全部楼层
(回帖
使用道具 举报

回复

发表于 2015-8-15 06:05:22 | 显示全部楼层
:lol学习学习
使用道具 举报

回复

发表于 2015-8-15 06:42:02 | 显示全部楼层
我想要看- -
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部