`
hai0378
  • 浏览: 533677 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

3DES 加密算法 及java实现

 
阅读更多

3DES

3.1 概述

3DES(或称为Triple DES)是三重数据加密算法TDEATriple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法

3.2 算法原理

使用356位的密钥 数据进行三次加密。3DES(即Triple DES)是DESAES过渡的加密算法1999年,NIST3-DES指定为过渡的加密标准)。

其具体实现如下:设Ek()Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥P代表明文,C代表密文,这样:

3DES加密过程为:C=Ek3(Dk2(Ek1(P)))

3DES解密过程为:P=Dk1(EK2(Dk3(C)))

3.3 Java中的3DES实现

         3DES的在Java的实现与DES类似,如下代码为3DES加密算法、CBC模式、NoPadding填充方式的加密解密结果,参考代码如下所示:

package amigo.endecrypt;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.spec.InvalidKeySpecException;

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

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class ThreeDESUtil {
    
// 算法名称 
    public static final String KEY_ALGORITHM = "desede";
    
// 算法名称/加密模式/填充方式 
    public static final String CIPHER_ALGORITHM = "desede/CBC/NoPadding";

    
/** 
     * CBC加密 
     * 
@param key 密钥 
     * 
@param keyiv IV 
     * 
@param data 明文 
     * 
@return Base64编码的密文 
     * 
@throws Exception 
     
*/

    
public static byte[] des3EncodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {
        Security.addProvider(
new BouncyCastleProvider()); 
        Key deskey 
= keyGenerator(new String(key));
        Cipher cipher 
= Cipher.getInstance(CIPHER_ALGORITHM);
        IvParameterSpec ips 
= new IvParameterSpec(keyiv);
        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
        
byte[] bOut = cipher.doFinal(data);
        
for (int k = 0; k < bOut.length; k++{
            System.out.print(bOut[k] 
+ " ");
        }

        System.out.println(
"");
        
return bOut;
    }


    
/** 
     *   
     * 生成密钥key对象 
     * 
@param KeyStr 密钥字符串 
     * 
@return 密钥对象 
     * 
@throws InvalidKeyException   
     * 
@throws NoSuchAlgorithmException   
     * 
@throws InvalidKeySpecException   
     * 
@throws Exception 
     
*/

    
private static Key keyGenerator(String keyStr) throws Exception {
        
byte input[] = HexString2Bytes(keyStr);
        DESedeKeySpec KeySpec 
= new DESedeKeySpec(input);
        SecretKeyFactory KeyFactory 
= SecretKeyFactory.getInstance(KEY_ALGORITHM);
        
return ((Key) (KeyFactory.generateSecret(((java.security.spec.KeySpec) (KeySpec)))));
    }


    
private static int parse(char c) {
        
if (c >= 'a'return (c - 'a' + 10& 0x0f;
        
if (c >= 'A'return (c - 'A' + 10& 0x0f;
        
return (c - '0'& 0x0f;
    }

 
    
// 从十六进制字符串到字节数组转换 
    public static byte[] HexString2Bytes(String hexstr) {
        
byte[] b = new byte[hexstr.length() / 2];
        
int j = 0;
        
for (int i = 0; i < b.length; i++{
            
char c0 = hexstr.charAt(j++);
            
char c1 = hexstr.charAt(j++);
            b[i] 
= (byte) ((parse(c0) << 4| parse(c1));
        }

        
return b;
    }


    
/** 
     * CBC解密 
     * 
@param key 密钥 
     * 
@param keyiv IV 
     * 
@param data Base64编码的密文 
     * 
@return 明文 
     * 
@throws Exception 
     
*/

    
public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {
        Key deskey 
= keyGenerator(new String(key));
        Cipher cipher 
= Cipher.getInstance(CIPHER_ALGORITHM);
        IvParameterSpec ips 
= new IvParameterSpec(keyiv);
        cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
        
byte[] bOut = cipher.doFinal(data);
        
return bOut;
    }


    
public static void main(String[] args) throws Exception {
        
byte[] key = "6C4E60E55552386C759569836DC0F83869836DC0F838C0F7".getBytes();
        
byte[] keyiv = 12345678 };
        
byte[] data = "amigoxie".getBytes("UTF-8");
        System.out.println(
"data.length=" + data.length);
        System.out.println(
"CBC加密解密");
        
byte[] str5 = des3EncodeCBC(key, keyiv, data);
        System.out.println(
new sun.misc.BASE64Encoder().encode(str5));

        
byte[] str6 = des3DecodeCBC(key, keyiv, str5);
        System.out.println(
new String(str6, "UTF-8"));
    }

}

     测试结果如下所示:

data.length=8
CBC加密解密
-32 6 108 42 24 -112 -66 -34 
4AZsKhiQvt4
=
amigoxie
分享到:
评论

相关推荐

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

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

    des加密算法的JAVA 实现

    这个例子中,`Des算法JAVA的实现`文件可能包含了一个完整的Java程序,演示了上述步骤的代码实现。通过运行这个程序,你可以看到DES加密和解密的实际效果。然而,实际应用中,为了安全性,通常会使用更强大的加密算法...

    利用DES加密算法保护Java源代码

    利用DES加密算法保护Java源代码利用DES加密算法保护Java源代码

    3DES加密算法C语言实现

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

    Java 3des加密算法ECB模式

    Java 3des加密算法ECB模式,亲测完美通过。目前网上的大部分算法都通不过或者加进Base64之类的,还要不下载其它jar包。而代码使用时直接下载运行,无须配置和下载额外的jar包 ,只需换上自己的密钥和待加密的数据...

    DES加密算法的java实现

    这是des算法的java实现.DES加密算法的实现很简单,很适合初学者来学习参考

    常用MD5加密算法和3-DES加密算法java实现

    ### 常用MD5加密算法和3-DES加密算法Java实现 在现代软件开发过程中,数据的安全性变得越来越重要。对于数据传输和存储过程中的安全性保障,加密技术发挥着至关重要的作用。本文将详细介绍如何在Java环境中实现两种...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    完整word版-DES加密算法的JAVA实现.doc

    "DES 加密算法的 JAVA 实现" 本文主要介绍了 DES 加密算法的原理、实现和应用。DES(Data Encryption Standard)是一种块加密算法,由 IBM 公司于上世纪 1977 年提出,曾经成为世界上最广泛使用的密码体制。DES 的...

    3DES加密java实现

    本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,让我们了解3DES的工作原理。3DES是对原始DES算法的扩展,它通过执行三次加密过程来提高安全性。简而言之,3DES分为两种模式:EDE...

    用Java实现的DES加密算法

    本程序是java语言实现的DES加密算法的实例。

    DES对称加密算法Java实现

    DES算法为密码体制中的对称密码体制,是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 这里以Java代码实现DES算法。

    JAVA实现des加密算法 实例

    在Java中,我们可以使用`javax.crypto`包中的类来实现DES加密。以下将详细介绍如何在Java中实现DES加密,并提供一个实例。 首先,理解DES算法的基本原理: DES是一种块密码,它将明文分为64位的数据块进行加密,...

    DES加密算法JAVA实现

    ### DES加密算法JAVA实现 #### 一、目的与意义 随着信息技术的快速发展,信息安全变得尤为重要。无论是政府机构、企业还是个人用户,都需要确保敏感信息不被未经授权的人访问。在这种背景下,密码学作为保障信息...

    DES加密算法JAVA代码

    ### DES加密算法JAVA代码知识点详解 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称密钥加密技术。在Java中实现DES加密解密功能通常涉及以下几个关键类:`javax.crypto....

    des加密算法(js+java)js加密 java解密

    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...

    DES加密算法的JAVA设计与实现

    通过应用DES算法加解密的具体实现,进一步加深对DES算法的理解,论证了DES算法具有加密快速且强壮的优点,适合对含有大量信息的文件进行加密,同时分析了DES算法密钥过短(56位)所带来的安全隐患。

    DES_DES加密算法JAVA实现_

    以下是Java实现DES加密算法的基本步骤: 1. **密钥生成**: 首先,我们需要生成一个DES密钥。在Java中,可以使用`KeyGenerator`类来生成密钥。例如: ```java KeyGenerator keyGen = KeyGenerator.getInstance(...

    Java实现文件的RSA和DES加密

    4. Java 中的实现:在 Java 中,实现 DES 加密算法可以通过生成一对密钥,然后保存到 xml 文件中,以便以后获取私匙和公钥。文件加密可以通过使用 Cipher 对象来实现。 5. 密钥管理:对称加密算法的密钥管理是一个...

    DES加密算法(JAVA和C语言描述)结果一致

    标题"DES加密算法(JAVA和C语言描述)结果一致"表明我们将探讨如何在两种不同的编程语言——Java和C中实现DES加密,确保得到相同的加密结果。在跨语言实现加密算法时,一致性至关重要,因为这确保了无论在哪种环境下...

Global site tag (gtag.js) - Google Analytics