前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种常见的对称加密算法--DES分析

一种常见的对称加密算法--DES分析

原创
作者头像
用户8983410
修改2021-10-08 14:56:13
7570
修改2021-10-08 14:56:13
举报

一种常见的对称加密算法--DES

  目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。   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的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。   通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。  DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。

1.设计自己的哈希函数。不要简单地复制粘贴常见开源代码。这样会增加安全性,别人就算获得了你的加密源码,也要重新构造彩虹表。 2.SHA-1,安全哈希算法,对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应,雪崩效应是我们所希望的。相比MD5,推导过程比较相似,因为二者均由MD4导出,但是比md5长摘要长32 位,更安全,但依然可以用彩虹表破解。 3.SHA-224、SHA-256、SHA-384,和SHA-512并称为SHA-2,它们生成的摘要密文分别就是224,256,384,512位。虽然SHA-2比SHA-1具有更高的安全性,但是SHA-2应用并不广泛,原因是在某些操作系统上缺乏支持。 4.MD5+salt对于大部分中小网站来说已经足够安全了; 5.不能加固定盐(salt)(不是随机salt,全部设一样的值),人家连你的密码库都能拿到,盐还不是轻而易举的事情么?还有说不知道我的算法是什么,老大,人家能攻破你的系统登进来,把你的整套数据库拿走,还差程序不成?告诉你,剩下的问题只是你的库里面有多少价值而已。比如这样的思路: 我已经有你的程序了; 找到生成密码散列值的入口函数Fuck(); 拿一个明文密码库,在一个用户账号上面不停地改密码,也就是用每一个P不断地Fuck(P); 好了,密码碰撞库就出来了。

一些调用方法:

MD5

代码语言:javascript
复制
import java.math.BigInteger;
import java.security.MessageDigest;
/*
MD5(Message Digest algorithm 5,信息摘要算法) 
通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串
Digest:汇编
*/
public class MD5 {
public static final String KEY_MD5 = "MD5";   

public static  String  getResult(String inputStr)
{
    System.out.println("=======加密前的数据:"+inputStr);
    BigInteger bigInteger=null;

    try {
     MessageDigest md = MessageDigest.getInstance(KEY_MD5);   
     byte[] inputData = inputStr.getBytes(); 
     md.update(inputData);   
     bigInteger = new BigInteger(md.digest());   
    } catch (Exception e) {e.printStackTrace();}
    System.out.println("MD5加密后:" + bigInteger.toString(16));   
    return bigInteger.toString(16);//返回此 BigInteger 的给定基数16进制的字符串表示形式。
}

public static void main(String args[])
{
    try {
         String inputStr = "简单加密8888888888888888888";   
         getResult(inputStr);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

SHA

代码语言:javascript
复制
import java.math.BigInteger;
import java.security.MessageDigest;

/*
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,
被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了, 
但是SHA仍然是公认的安全加密算法,较之MD5更为安全*/
public class SHA {
 public static final String KEY_SHA = "SHA";   

public static  String  getResult(String inputStr)
{
    BigInteger sha =null;
    System.out.println("=======加密前的数据:"+inputStr);
    byte[] inputData = inputStr.getBytes();   
    try {
         MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);  
         messageDigest.update(inputData);
         sha = new BigInteger(messageDigest.digest());   
         System.out.println("SHA加密后:" + sha.toString(32));   
    } catch (Exception e) {e.printStackTrace();}
    return sha.toString(32);
}

public static void main(String args[])
{
    try {
         String inputStr = "简单加密";   
         getResult(inputStr);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一种常见的对称加密算法--DES
  • 一些调用方法:
    • MD5
      • SHA
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档