`

3DES

 
阅读更多
众多的加密手段大致可以分为单项加密和双向加密。单项加密指通过对数据进行摘要计算生成密文,密文不可逆推还原,比如有Base64、MD5、SHA等;双向加密则相反,指可以把密文逆推还原成明文,其中双向加密又分为对称加密和非对称加密。对称加密是指数据使用者必须拥有同样的密钥才可以进行加密解密,就像大家共同约定了一组暗号一样,对称加密的手段有DES、3DES、AES、IDEA、RC4、RC5等;而非对称加密相对于对称加密而言,无需拥有同一组密钥,它是一种“信息公开的密钥交换协议”。非对称加密需要公开密钥和私有密钥两组密钥,公开密钥和私有密钥是配对起来的,也就是说使用公开密钥进行数据加密,只有对应的私有密钥才能进行解密。此类的加密手段有RSA、DSA等。

DES(Data Encryption Standard)和TripleDES是对称加密的两种实现。
DES和TripleDES基本算法一致,只是TripleDES算法提供的key位数更多,加密可靠性更高。
DES使用的密钥key为8字节,初始向量IV也是8字节。
TripleDES使用24字节的key,初始向量IV也是8字节。
两种算法都是以8字节为一个块进行加密,一个数据块一个数据块的加密,一个8字节的明文加密后的密文也是8字节。如果明文长度不为8字节的整数倍,添加值为0的字节凑满8字节整数倍。所以加密后的密文长度一定为8字节的整数倍。

3DES实现: 主要有CBC,ECB实现,java默认是ECB
对于待加密解密的数据的填充方式:NoPadding、PKCS5Padding、SSL3Padding,默认填充方式为,PKCS5Padding

java中要求key的size必须为24;对于CBC模式下的向量iv的size两者均要求必须为8, 所以在处理8字节的key的时候,直接使用DES三次, 加密时候为(加密--解密--加密),解密时候为:(解密--加密--解密)
ECB模式:
优点:
1. 简单;
2. 有利于并行计算;
3. 误差不会被传递;
缺点:
1. 不能隐藏明文的模式;
2. 可能对明文进行主动攻击;

DES ECB(电子密本方式)其实非常简单,就是将数据按照8个字节一段进行DES加密或解密得到一段段的8个字节的密文或者明文,最后一段不足8个字节(一般补0或者F),按照需求补足8个字节进行计算(并行计算),之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

CBC模式:
优点:
1. 不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准;
缺点:
1. 不利于并行计算;
2. 误差传递;
3. 需要初始化向量IV;

DES CBC(密文分组链接方式)有点麻烦,它的实现机制使加密的各段数据之间有了联系。其实现的机理如下:
加密步骤如下:
1. 首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)
2. 第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)
3. 第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
4. 之后的数据以此类推,得到Cn
5. 按顺序连为C1C2C3......Cn即为加密结果。
初始向量必须为8位,秘钥不得少于24位

private final static String iv = "12121212";
// 加解密统一使用的编码方式
private final static String encoding = "utf-8";

/**
* 3DES加密
*
* @param plainText 普通文本
* @return
* @throws Exception
*/
public static String encode(String plainText,String secretKey) throws Exception {
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);

Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));
return Base64Util.encode(encryptData);
}

/**
* 3DES解密
*
* @param encryptText 加密文本
* @return
* @throws Exception
*/
public static String decode(String encryptText,String secretKey) throws Exception {
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, deskey, ips);

byte[] decryptData = cipher.doFinal(Base64Util.decode(encryptText));

return new String(decryptData, encoding);
}

public static void main(String[] args) throws Exception {
String pwd = "123456";
String secretKey = "12wewe34er4r4rwe3e4rt56y";
String newEnc = encode(pwd,secretKey);

System.out.println(pwd+"加密后:"+newEnc);

System.out.println(decode("IV5NJoVIsIw=",secretKey));

}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    C++实现3Des算法.zip_3DES算法 C++_3des_C++_visual c_加密算法

    **3DES(Triple DES)算法**,全称为三重数据加密标准,是在DES(Data Encryption Standard)加密算法基础上发展起来的一种加强版加密技术。DES是一种对称加密算法,使用56位的密钥对数据进行加密,而3DES是通过三次...

    3DES算法计算MAC

    3DES 算法计算 MAC 3DES 算法是一种基于对称加密的算法,使用双倍长密钥来计算工作密钥、PIN 密钥和 MAC 值。下面是关于 3DES 算法计算 MAC 的知识点: 1. 什么是 3DES 算法? 3DES 算法是基于 DES 算法的一种...

    3DES加密解密工具

    标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...

    3DES加密java实现

    3DES(Triple Data Encryption Algorithm)是一种广泛应用的对称加密算法,基于DES(Data Encryption Standard)并对其进行了加强。本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,...

    STM32上实现D3DES加密

    3. **理解D3DES算法**:仔细阅读DES和D3DES的算法描述,了解其工作流程,包括初始置换、扩展置换、S盒操作、逆初始置换等步骤。 4. **设置密钥**:D3DES需要两个独立的56位密钥,通常会将一个64位密钥分为两半,...

    3DES加密js前端示例

    3DES(Triple Data Encryption Algorithm,三重数据加密算法)是一种强化版的DES(Data Encryption Standard)加密算法,它通过三次应用DES加密过程来提高安全性。在JavaScript中实现3DES加密通常是为了在网络通信中...

    des3_3des加密_

    标题中的"des3_3des加密_"表明我们将讨论的是关于Triple Data Encryption Standard(3DES)加密算法,这是一种强化版的DES(Data Encryption Standard)加密算法。DES是一种块密码,最初在1970年代被美国国家标准局...

    nodejs实现3des(2倍长)加密方式,与DES加密工具一致

    使用`crypto.createCipheriv`方法创建3DES加密器,需要指定加密算法('des-ede3'代表3DES),初始化向量(IV,通常为随机生成的8字节序列),以及密钥。例如: ```javascript const iv = Buffer.alloc(8, 0); // ...

    MFC实现3DES程序对文件加解密

    3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对 3DES 数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92...

    3DES加密算法源码

    最早的定义了该算法的标准(ANS X9.52,1998年发布)将其描述为“三重数据加密算法(TDEA)”— 即为ANSI X3.92中定义的数据加密算法(DEA)的三次重复操作— 而完全没有使用术语“3DES”或“DES”。FIPS PUB 46-3...

    C# DES 3DES AES SM4 PBOC加解密源码

    本文将深入探讨C#中实现的四种主要加密算法:DES、3DES、AES以及SM4,并结合PBOC(中国金融智能卡)标准算法进行讨论。这些源码可用于创建动态库,为实际项目提供安全的数据保护功能。 1. **DES(Data Encryption ...

    3DES加密算法C语言实现

    **3DES(Triple DES)加密算法是数据加密标准(DES)的一种增强版本,它通过三次迭代来提高安全性。在C语言中实现3DES加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将...

    des_latest.tar.gz_3DES verilog_3des_3des verilog_des_verilog 3d

    标题中的"des_latest.tar.gz_3DES verilog_3des_3des verilog_des_verilog 3d"提及了两种广泛使用的对称加密算法:DES(Data Encryption Standard)和3DES(Triple DES)。3DES是DES的增强版本,为了解决DES的相对较...

    实现使用3des在页面js加密,后台java解密

    3DES(Triple DES)是一种广泛使用的对称加密算法,全称为三重数据加密标准,它基于DES(Data Encryption Standard)并对其进行了三次迭代,以增强安全性。本篇将详细介绍如何在网页前端使用JavaScript进行3DES加密...

    C++ 实现 3DES加解密Base64加解密

    本篇文章将详细探讨在C++中实现3DES和Base64加解密的技术要点。 3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它是DES(Data Encryption Standard)的加强版。DES使用56位的密钥,3DES通过三次...

    RSA加密和3DES加解密

    RSA加密和3DES加解密是两种常见的对称与非对称加密算法,在信息安全领域有着广泛应用。在JAVA环境中,这两种加密技术提供了数据保护的重要手段,确保了敏感信息在网络传输过程中的安全。 首先,RSA(Rivest-Shamir-...

    C# 3DES 加密源码

    3DES(Triple Data Encryption Algorithm)是一种广泛应用的对称加密算法,它基于DES(Data Encryption Standard)并增强了其安全性。本资源包含了一个C#语言实现的3DES加密源码,可用于数据加密。 3DES的工作原理...

    3DES算法,C语言实现的实例

    3DES加密和解密算法, 用C语言实现的代码实例 。// printf("Original data: %s\n", data); des(data, key1, len); //产生密钥,并调整数组byte,输出密文。 /*---再解次密---*/ printf("Please input a key2:\n...

Global site tag (gtag.js) - Google Analytics