Des加密算法java实现

Posted 跳刀不跳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Des加密算法java实现相关的知识,希望对你有一定的参考价值。

package com.cs99lzzs.shop.util;

import java.math.BigInteger;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

import org.apache.commons.lang.StringUtils;
/**
 * 加密算法
 * 
 * @version $Id: DesCbcSecurity.java, v 0.1 2017年7月24日 上午9:41:59 chenxu Exp $
 */
public class DesCbcSecurity {
    public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";

    /**
     * 
     * @param data
     * @param key
     * @return
     * @throws Exception
     */
    public static String encode(String data, String key) throws Exception {
        if (StringUtils.isEmpty(key) || StringUtils.isEmpty(data)) {
            return null;
        }
        return encode(data.getBytes(), key);
    }

    /**
     * DES算法,加密
     *
     * @param data
     *            待加密字符串
     * @param key
     *            加密私钥,长度不能够小于8位
     * @return 加密后的字节数组,一般结合Base64编码使用
     * @throws CryptException
     *             异常
     */
    private static String encode(byte[] data, String key) throws Exception {
        try {
            DESKeySpec dks = new DESKeySpec(key.getBytes());

            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            // key的长度不能够小于8位字节
            Key secretKey = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes());
            AlgorithmParameterSpec paramSpec = iv;
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);

            byte[] bytes = cipher.doFinal(data);

            return asHex(bytes);
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
    
    public static String md5(String input) throws NoSuchAlgorithmException {
        String result = input;
        if(input != null) {
            MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1"
            md.update(input.getBytes());
            BigInteger hash = new BigInteger(1, md.digest());
            result = hash.toString(16);
            while(result.length() < 32) { //40 for SHA-1
                result = "0" + result;
            }
        }
        return result;
    }
    
    public static String asHex (byte buf[]) {  
        StringBuffer strbuf = new StringBuffer(buf.length * 2);  
        int i;  
        for (i = 0; i < buf.length; i++) {  
            if (((int) buf[i] & 0xff) < 0x10)  
                strbuf.append("0");  
            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));  
        }  
        return strbuf.toString();  
    } 
}

 

以上是关于Des加密算法java实现的主要内容,如果未能解决你的问题,请参考以下文章

java des 加密 解密 密钥随机取得方法

80分求DES加密解密算法实现的PHP源代码

JAVA和.NET使用DES对称加密的区别

des加密 c++ java

java 实现 DES加密 解密算法

用Rust实现DES加密/解密算法