2、DES加密算法

由于计算机软件的非法复制,通信的泄密、数据安全受到威胁,解密及盗版问题日益严重,甚至引发国际争端,所以在信息安全技术中,加密技术占有不可替代的位置,因此对信息加密技术和加密手段的研究与开发,受到各国计算机界的重视,发展日新月异。

在系统研发过程中,有些数据对于系统或者用户来说,都是非常重要且不可泄露的,对重要数据的加密对于任何系统来说都是非常必要的,例如用户的登录密码,交易密码等等,本文借助用户注册时对用户密码的加密,来大致说说一些常用的加密算法以及相关实现。

DES加密算法

DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由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等)在公共通信网中传输的安全性和可靠性。

在java中,使用DES算法的例子如下:

public class SecurityDESUtils {
    private static Logger logger = LogManager.getLogger(SecurityDESUtils.class);

    private static final String ENCODEING = "UTF-8";
    private static final String ALGORITHM = "DES";//加密算法

    /**
     * @Comment DES算法加密
     * @param plaintext 需要加密的文本
     * @param secureKey 长度不能小于8
     * @Author Ron
     * @Date 2017年9月12日 上午11:54:12
     * @return
     */
    public static String encrypt(String plaintext, String secureKey) {
        String encryptStr = "";
        try {
            byte[] datasource = plaintext.getBytes(ENCODEING);
            SecureRandom random = new SecureRandom();
            DESKeySpec desKey = new DESKeySpec(secureKey.getBytes(ENCODEING));

            SecretKeyFactory keyFactory =  SecretKeyFactory.getInstance(ALGORITHM);
            SecretKey securekey = keyFactory.generateSecret(desKey);

            //Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance(ALGORITHM);

            //用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, securekey, random);

            //现在,获取数据并加密
            //正式执行加密操作
            byte[] encryptSrc = cipher.doFinal(datasource);

            encryptStr = Base64Utils.encodeToString(encryptSrc);
        } catch (Exception e) {
            logger.error("DES加密报异常",e);
        }
        return encryptStr;
    }

    /**
     * @Comment 解密
     * @param encryptStr 已加密的字符串
     * @param secureKey 长度不能小于8
     * @Author Ron
     * @Date 2017年9月12日 下午1:12:56
     * @return
     * @throws BadPaddingException 
     * @throws IllegalBlockSizeException 
     */
    public static String decrypt(String encryptStr, String secureKey){
        String decryptStr = ""; 
        try {
            byte[] src = Base64Utils.decodeFromString(encryptStr);
            // DES算法要求有一个可信任的随机数源
            SecureRandom random = new SecureRandom();
            // 创建一个DESKeySpec对象
            DESKeySpec desKey = new DESKeySpec(secureKey.getBytes(ENCODEING));

            // 创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);

            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey securekey = keyFactory.generateSecret(desKey);
            // Cipher对象实际完成解密操作
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, securekey, random);
            // 真正开始解密操作
            byte[] decryptSrc = cipher.doFinal(src);
            decryptStr = new String(decryptSrc,ENCODEING);
        } catch (Exception e) {
            logger.error("DES解密失败",e);
        }
        return decryptStr;
    }

    public static void main(String[] arg) throws Exception{
        String src="ninhao";
        String srKey="40c7f529c177487bb3b03cf16e962c82";
        String enString = encrypt(src,srKey);
        System.out.println("加密:"+enString);

        System.out.println("解密:"+decrypt(enString,srKey));
    }
}

攻击 DES 的主要形式被称为蛮力的或穷举,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过 ,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准 — 高级加密标准(Advanced Encryption Standard,AES)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RonTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值