`

Triple Des加密算法

 
阅读更多
介绍摘自Wikipedia:
Triple DES又称3DES,是DES加密算法的一种模式,它使用3条56位的密钥
3DES3DES
数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(M)))
3DES解密过程为:M=Dk1(EK2(Dk3(C)))
代码:
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.lang3.StringUtils;
import jodd.util.Base64;
 public class TripleDES {
// 算法名称  
    public static final String KEY_ALGORITHM = "DESede";  
    // 算法名称/加密模式/填充方式  
    public static final String CIPHER_ALGORITHM_CBC = "DESede/CBC/PKCS5Padding";
    public static byte[] DefaultIV = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF};
    private SecretKey secretKey;
    private Cipher cipher;
    private byte[] encryptData;
    private AlgorithmParameterSpec iv;
    private static TripleDES tripleDES = null;
    public static TripleDES getInstance(String key) throws Exception {
    if (tripleDES == null) {
    synchronized (TripleDES.class) {
    tripleDES = new TripleDES(key,"CBC");
}
    }
    return tripleDES;
    }
    
    public TripleDES(String key,String mode) {        
        if("CBC".equals(mode)) {
        if (StringUtils.isEmpty(key)) {
        key = "GDAU8xpYaWivfJS1R5NGFotZwY8tt6KH";
        }
        byte[] keyData = Base64.decode(key);
            try {
cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
}
            secretKey = new SecretKeySpec(keyData, KEY_ALGORITHM);
            iv = new IvParameterSpec(DefaultIV);
        }  
    }
    
    /**
     * 初始向量8位
     * @return
     */
    byte[] getIV() {  
    return DefaultIV;
    }
    
    /** 
     * 加密 
     * @param str 
     * @return byte[]
     * @throws Exception 
     */  
    public byte[] encrypt(String str) throws Exception {
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);  
        return encryptData = cipher.doFinal(str.getBytes("utf-8"));  
    }
    
    /** 
     * 解密 
     * @param encrypt 
     * @return byte[]
     * @throws Exception 
     */  
    public byte[] decrypt(byte[] encrypt) throws Exception {  
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);  
        return encryptData = cipher.doFinal(encrypt);  
    }
    
    /** 
     * TripleDes三层加密,并且base64编码
     * 默认utf-8
     * @param str 
     * @return String
     * @throws Exception 
     */  
    public String encryptStr(String str) throws Exception {  
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        encryptData = cipher.doFinal(str.getBytes("utf-8"));
        return Base64.encodeToString(encryptData);
    }
    /** 
     * 解密 返回字符串 ,,并且base64解码
     * 默认utf-8
     * @param encrypt 
     * @return String
     * @throws Exception 
     */  
    public String decryptStr(String data) throws Exception {
    byte[] encrypt = Base64.decode(data);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
        encryptData = cipher.doFinal(encrypt);
        return new String(encryptData,"UTF-8");
    }
    public static void main(String[] args) throws Exception {  
        TripleDES tripleDES = TripleDES.getInstance("dgKU8xpYaRivfJS1R5NGFotZwY6lI6jI");
        Test1();
//        String data = "\"address\":\"北京市\",\"applyNo\":\"09ecd729d09e461bb9ad0329ecddf163\",\"applyReason\":\"测试\",\"creditAmount\":10,\"creditReason\":\"系统通过\",\"ext\":{},\"idCard\":\"101123\",\"jdPin\":\"washingtin\",\"name\":\"X_man\",\"phone\":\"15520059911\",\"reqDate\":\"20160823135900\",\"returnParams\":\"\",\"riskRemark\":\"无\"";
//        System.out.println(HashUtils.MD5(data));
//        tripleDES.testEncrypt();
        tripleDES.testDecrypt();
    }
}
分享到:
评论

相关推荐

    des加密算法

    DES(Data Encryption ...总结来说,DES加密算法是历史上重要且有影响力的加密技术,虽然现在已被更先进的算法所取代,但它在密码学的发展历程中起到了关键作用,并且对于理解和学习现代加密技术的基础至关重要。

    3DES加密算法 C++实现

    3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条64位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

    3DES加密算法C语言实现

    在C语言中实现3DES加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将C语言代码移植到Android平台,通过JNI接口与Java代码交互,能够很好地解决加解密结果不一致的问题。...

    TripleDES加密解密算法的实现(JAVA)

    TripleDES加密解密算法的实现(JAVA)

    DES加密算法应用

    本篇文章将深入探讨DES加密算法的应用及其在Java编程中的实现。 DES算法由IBM公司在1970年代初设计,后来被美国国家标准局采纳为数据加密标准。该算法基于Feistel结构,使用64位的密钥对64位的数据进行加密,实际...

    DES.rar_DES JAVA_DES algorithm_DES 加密算法_DES加密算法_des ja

    在"DES.rar_DES JAVA_DES algorithm_DES 加密算法_DES加密算法_des ja"这个压缩包中,很可能包含了一个完整的Java实现的DES加密算法示例,包括源代码文件"DES.java",可能用于教学、学习或项目开发,以便开发者能够...

    DES加密算法及有关说明.rar

    对于理解DES加密算法,可以参考"DES加密算法及有关说明(HTM)"文件,其中可能包含了更详细的步骤解释、工作示例以及与实际应用相关的讨论。学习DES不仅有助于理解对称加密的基础原理,也为理解和评估其他更现代的加密...

    3DES加密算法源码

    它相当于是对每个数据块应用三次DES加密算法。 最早的定义了该算法的标准(ANS X9.52,1998年发布)将其描述为“三重数据加密算法(TDEA)”— 即为ANSI X3.92中定义的数据加密算法(DEA)的三次重复操作— 而完全...

    des加密算法事例 des加密算法事例

    DES加密算法的核心是Feistel结构,它将明文分成两半,然后通过一系列的迭代过程进行加密。每个迭代包含以下步骤: 1. **初始置换**:首先,64位明文通过一个固定的初始置换表进行变换,目的是打乱原始数据的顺序,...

    DES加密算法JAVA实现(带简单界面)

    在项目中,"杨叶龙+13051067+第二次作业+DES加密算法"可能是文件的命名规范,其中包含了学生的姓名、学号以及作业主题,表明这是一个学生的学习成果,可能包含源代码、编译后的JAR文件以及相关的文档。 在实际应用...

    DES加密算法实现的C++类

    C++是面向对象的编程语言,用于实现DES加密算法,可以创建一个类来封装加密和解密的过程。一个DES加密算法的C++类可能包含以下几个主要部分: 1. **密钥处理**:DES的密钥是64位,但其中有8位是奇偶校验位,实际...

    3DES加密算法

    3DES(Triple DES)全称为三重数据加密标准,是DES(Data Encryption Standard)加密算法的一个变种。DES是一种块密码,它使用56位密钥对64位的数据块进行加密,但56位的密钥长度在现代密码学中被认为是不够安全的。...

    des加密算法 cbc

    DES加密算法使用56位的密钥对64位的数据块进行操作,通过一系列复杂的数学运算(如置换、异或等)来实现数据的加密和解密。 CBC(Cipher Block Chaining)模式是DES加密的一种工作模式,它通过前一密文块与当前明文...

    des加密算法_DES加密算法_encryption_

    DES加密算法的核心是Feistel网络结构,它通过一系列的迭代过程来变换输入的64位明文块。每一轮迭代包括以下四个步骤: 1. **扩展置换(Permutation Function P)**:首先,64位的数据经过一个固定的置换表,将其...

    3des加密算法C语言实现

    在C语言中实现3DES加密算法,需要理解以下几个核心概念: 1. **DES算法**:DES是一种64位块密码,使用56位的密钥进行加密。它通过一系列的替换和置换操作,如初始置换、轮函数和逆初始置换,将明文转换为密文。 2....

    DES加密算法.ppt

    在DES加密过程中,首先进行的是密钥扩展。原始的64位密钥中,只有56位是实际参与加密的,因为第8、16、24、32、40、48、56、64位是奇偶校验位,用于检查传输错误,但不参与加密运算。剩余的56位密钥经过PC-1...

    3DES加密js前端示例

    以下是对3DES加密算法及其在JavaScript前端应用的详细说明: ### 1. 3DES工作原理 3DES由3个独立的DES加密过程组成,分为两个阶段:加密和解密。在加密过程中,数据首先用一个密钥进行DES加密,然后用第二个密钥...

    RAS数据库加密算法

    它通过使用Triple Des加密算法确保了数据在存储过程中的安全,并利用C#语言实现了这一算法,提高了数据库的整体安全水平。然而,再好的加密算法也需要严格的密钥管理作保障。在实际应用中,应当对密钥的生命周期进行...

    Java AES DES加密算法的坑

    总结来说,理解和正确使用Java中的AES和DES加密算法,需要考虑密钥管理、初始化向量、填充模式、编码以及错误处理等多个方面,同时要关注加密过程中的安全风险和潜在陷阱。在实践中,结合合适的加密库和最佳实践,...

    基于单片机的实时3DES 加密算法的实现

    ### 基于单片机的实时3DES加密算法实现 #### 1. 引言 随着信息技术的飞速发展,信息安全技术变得日益重要。单片机作为一种成熟且广泛应用的技术,在许多领域扮演着关键角色。然而,对于复杂的加密算法如3DES来说,...

Global site tag (gtag.js) - Google Analytics