用了如下的方法使用des加密和解密,但解密后的结果和原来的结果不一致
package com.cjnetwork.ciphertool.aatest;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class TestDES {
public static void main(String[] args) throws Exception {
byte[] rawData = new byte[]{3, 5, 7, 9, 1, 2, 3, 4};
printByte(rawData);
SecureRandom secureRandom = new SecureRandom();
DESKeySpec deskeySpec = new DESKeySpec(rawData);
SecretKey secretKey = SecretKeyFactory.getInstance("DES").generateSecret(deskeySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, secureRandom);
byte[] encrpytedData = cipher.update(rawData);
printByte(encrpytedData);
SecureRandom secureRandom2 = new SecureRandom();
DESKeySpec deskeySpec2 = new DESKeySpec(encrpytedData);
SecretKey secretKey2 = SecretKeyFactory.getInstance("DES").generateSecret(deskeySpec2);
Cipher cipher2 = Cipher.getInstance("DES");
cipher2.init(Cipher.DECRYPT_MODE, secretKey2, secureRandom2);
byte[] decryptedData = cipher.update(encrpytedData);
printByte(decryptedData);
}
private static void printByte(byte[] data){
for(int i = 0; i < data.length; i++){
System.out.print(data[i]);
if(i + 1 != data.length){
System.out.print(" ");
}
}
System.out.println();
}
}
发现问题如下:
des的使用不是如此使用,des加密解密中使用的密钥是成对出现的,在上述过程中,分别使用了2组密钥对,因此结果是不相关的,需要从相同的来源生成一对密钥,然后在加密解密的时候只是生成的cipher的模式是不同的,而且都是使用doFinal(byte[])方法加密和解密,update方法暂时不知道是做什么用处。
应该如此使用:
byte[] rawKeyData = new byte[]{1, 2, 3, 4, 5, 6, 7, 8};//至少8个
DESKeySpec deskeySpec = new DESKeySpec(rawKey);
SecretKey secretKey = SecretKeyFactory.getInstance("DES").generateSecret(deskeySpec);
Cipher encryptCipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
Cipher decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, secretKey);
如此你就有两个密钥了,一个encryptCipher,一个decryptCipher
一个用于加密数据,一个用于解密数据。
使用doFinal(byte[])方法加密和解密,update方法暂时不知道是做什么用处。
关于java的密钥问题,有几个常听到的名词
JCE:加密扩展即Java Cryptography Extension它是Sun的加密服务软件,包含了加密和密匙生成功能
JCA:Java Cryptography Architecture java的密钥体系结构
javax.crypto:jdk中自带的关于密钥的包
分享到:
相关推荐
在Java中,我们可以使用`javax.crypto`包中的`Cipher`类来实现3DES加密和解密。首先,我们需要创建一个`SecretKeySpec`对象,用于存储我们的密钥。密钥长度可以是128位(16字节),但3DES实际只使用其中的112位或168...
在项目中,"杨叶龙+13051067+第二次作业+DES加密算法"可能是文件的命名规范,其中包含了学生的姓名、学号以及作业主题,表明这是一个学生的学习成果,可能包含源代码、编译后的JAR文件以及相关的文档。 在实际应用...
1. 明文数据使用第一个密钥进行DES加密。 2. 得到的结果使用第二个密钥进行DES解密。 3. 上一步得到的结果再使用第三个密钥进行DES加密。 二、JavaScript中的3DES加密 在JavaScript中,我们可以使用开源库如crypto-...
在Java中,我们通常使用`javax.crypto`包来实现DES加密。以下是一些关键步骤和知识点: 1. 导入必要的库: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec....
- 第一轮:使用密钥K1对明文进行DES加密。 - 第二轮:使用密钥K2对上一步得到的密文进行DES解密。 - 第三轮:再次使用密钥K1对第二轮得到的密文进行DES加密。 4. **解密过程**:解密过程与加密相反,首先使用...
### 使用JAVA实现DES加密解密的关键知识点 #### 1. DES算法概述 DES(Data Encryption Standard),即数据加密标准,是一种对称密钥算法,由IBM公司开发,并于1977年被美国国家标准局(ANSI)采纳为数据加密标准。...
- 第一步,使用密钥K1对明文进行DES加密,得到中间结果C1。 - 第二步,使用密钥K2对C1进行DES解密,得到中间结果C2。 - 第三步,使用密钥K3对C2进行DES加密,得到最终的密文C。 **3. 解密过程:** 解密过程与加密...
Java 与 3DES 加密技术是信息安全领域中常见...通过学习和实践这些Java和3DES加密技术,您可以创建安全的数据传输和存储解决方案,确保敏感信息不被未经授权的第三方访问。记住,良好的加密实践是保护数据安全的关键。
在这个工程中,首先使用JNI调用C/C++编写的本地库进行第一次加密。这样做的好处可能是为了利用C/C++代码执行加密操作的效率优势,或者是为了利用某些特定的硬件加速。然后,将JNI加密后的结果再通过Java的内置DES...
首先,数据用一个密钥进行DES加密,然后用另一个密钥进行DES解密,最后再用第一个密钥进行DES加密。这个过程可以表示为E1(D1(E2(D1(P)))),其中P是明文,Ei是用第i个密钥进行加密,Di是用第i个密钥进行解密。 2. **...
1. **DES加密**:使用一个64位的密钥对数据进行加密。DES算法将64位的数据块分成左右两半,分别进行加密操作。由于实际使用中只使用56位密钥,所以会有8位用于奇偶校验,不参与加密过程。 2. **3DES加密**:3DES是...
### Java中的DES加密和解密 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称加密算法。它最初由IBM公司开发,并在1970年代中期被美国国家标准局(现为国家标准与技术研究院...
- 第一阶段:使用K1执行DES加密 - 第二阶段:如果K3与K1不同,则使用K2执行DES解密;如果K3 = K1,则使用K2执行DES加密 - 第三阶段:使用K3执行DES加密 4. **逆初始置换**:最后,经过第三阶段加密后的数据会...
它不是简单地将DES加密过程执行三次,而是采用了不同的密钥执行两次或三次加密过程。具体有以下两种模式: 1. **EDE模式**(Encrypt-Decrypt-Encrypt):首先使用第一个密钥K1进行加密,然后用第二个密钥K2进行解密...
3DES的工作原理可以简单概括为:首先,对明文使用一个密钥进行DES加密;接着,再用另一个密钥对上一步得到的密文进行DES解密;最后,再次用第三个密钥对解密后的密文进行DES加密。这样,即使攻击者获得了部分加密...
第一次更新: 更改了加密文件的表示方式,由加后缀.DES变为在原扩展名前加.DES 更改了块长,变为由512k变为512k-1 更改了密钥限制,由8位变为4位,实际加密中不足八位的循环补齐 密钥由显示改为了显示字符*的方式
总之,基于Java实现DES加密项目是一次深入学习和实践密码学原理的机会,不仅可以提升编程技能,还能加深对网络安全的理解。通过自定义加密库,我们可以更好地掌握加密算法的工作机制,并为未来的安全开发打下坚实...
DES(Data Encryption Standard)是一种块加密算法,由 IBM 公司于上世纪 1977 年提出,曾经成为世界上最广泛使用的密码体制。DES 的出现最终于 1977 年 2 月 15 日被采纳为“非密级”应用的一个标准。 在本文中,...
总结,Java和C#之间使用DES加密解密涉及密钥生成、数据分块、加密解密过程以及编码解码等步骤。为了实现跨平台的兼容性,必须确保所有参数和设置的一致性,包括密钥、IV、填充方式以及加密模式。在实际应用中,还...