`
cjnetwork
  • 浏览: 180008 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

第一次使用java的DES加密

阅读更多
用了如下的方法使用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中自带的关于密钥的包
分享到:
评论

相关推荐

    3DES加密java实现

    在Java中,我们可以使用`javax.crypto`包中的`Cipher`类来实现3DES加密和解密。首先,我们需要创建一个`SecretKeySpec`对象,用于存储我们的密钥。密钥长度可以是128位(16字节),但3DES实际只使用其中的112位或168...

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

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

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

    1. 明文数据使用第一个密钥进行DES加密。 2. 得到的结果使用第二个密钥进行DES解密。 3. 上一步得到的结果再使用第三个密钥进行DES加密。 二、JavaScript中的3DES加密 在JavaScript中,我们可以使用开源库如crypto-...

    java实现DES对称加密

    在Java中,我们通常使用`javax.crypto`包来实现DES加密。以下是一些关键步骤和知识点: 1. 导入必要的库: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec....

    JAVA中3des加密算法.pdf

    - 第一轮:使用密钥K1对明文进行DES加密。 - 第二轮:使用密钥K2对上一步得到的密文进行DES解密。 - 第三轮:再次使用密钥K1对第二轮得到的密文进行DES加密。 4. **解密过程**:解密过程与加密相反,首先使用...

    用JAVA实现DES加密解密

    ### 使用JAVA实现DES加密解密的关键知识点 #### 1. DES算法概述 DES(Data Encryption Standard),即数据加密标准,是一种对称密钥算法,由IBM公司开发,并于1977年被美国国家标准局(ANSI)采纳为数据加密标准。...

    3des加密解密

    - 第一步,使用密钥K1对明文进行DES加密,得到中间结果C1。 - 第二步,使用密钥K2对C1进行DES解密,得到中间结果C2。 - 第三步,使用密钥K3对C2进行DES加密,得到最终的密文C。 **3. 解密过程:** 解密过程与加密...

    java+3des加密+和字符串转换

    Java 与 3DES 加密技术是信息安全领域中常见...通过学习和实践这些Java和3DES加密技术,您可以创建安全的数据传输和存储解决方案,确保敏感信息不被未经授权的第三方访问。记住,良好的加密实践是保护数据安全的关键。

    使用jni和DES实现两次加密

    在这个工程中,首先使用JNI调用C/C++编写的本地库进行第一次加密。这样做的好处可能是为了利用C/C++代码执行加密操作的效率优势,或者是为了利用某些特定的硬件加速。然后,将JNI加密后的结果再通过Java的内置DES...

    使用3DES-ECB 加解密算法对JSON数据进行加密

    首先,数据用一个密钥进行DES加密,然后用另一个密钥进行DES解密,最后再用第一个密钥进行DES加密。这个过程可以表示为E1(D1(E2(D1(P)))),其中P是明文,Ei是用第i个密钥进行加密,Di是用第i个密钥进行解密。 2. **...

    java Des/3Des/含向量DES加解密可与C语言DES互相加解密(包含 javabase64 )

    1. **DES加密**:使用一个64位的密钥对数据进行加密。DES算法将64位的数据块分成左右两半,分别进行加密操作。由于实际使用中只使用56位密钥,所以会有8位用于奇偶校验,不参与加密过程。 2. **3DES加密**:3DES是...

    Java中的DES加密和解密

    ### Java中的DES加密和解密 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称加密算法。它最初由IBM公司开发,并在1970年代中期被美国国家标准局(现为国家标准与技术研究院...

    3des.zip_3DES加密解密_3des_3des java

    - 第一阶段:使用K1执行DES加密 - 第二阶段:如果K3与K1不同,则使用K2执行DES解密;如果K3 = K1,则使用K2执行DES加密 - 第三阶段:使用K3执行DES加密 4. **逆初始置换**:最后,经过第三阶段加密后的数据会...

    三次des标准加密算法

    它不是简单地将DES加密过程执行三次,而是采用了不同的密钥执行两次或三次加密过程。具体有以下两种模式: 1. **EDE模式**(Encrypt-Decrypt-Encrypt):首先使用第一个密钥K1进行加密,然后用第二个密钥K2进行解密...

    3des加密字符串文件加密

    3DES的工作原理可以简单概括为:首先,对明文使用一个密钥进行DES加密;接着,再用另一个密钥对上一步得到的密文进行DES解密;最后,再次用第三个密钥对解密后的密文进行DES加密。这样,即使攻击者获得了部分加密...

    更新1:DES文件加密(适合U盘使用)_java

    第一次更新: 更改了加密文件的表示方式,由加后缀.DES变为在原扩展名前加.DES 更改了块长,变为由512k变为512k-1 更改了密钥限制,由8位变为4位,实际加密中不足八位的循环补齐 密钥由显示改为了显示字符*的方式

    基于java实现DES算法加密报告相关

    总之,基于Java实现DES加密项目是一次深入学习和实践密码学原理的机会,不仅可以提升编程技能,还能加深对网络安全的理解。通过自定义加密库,我们可以更好地掌握加密算法的工作机制,并为未来的安全开发打下坚实...

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

    DES(Data Encryption Standard)是一种块加密算法,由 IBM 公司于上世纪 1977 年提出,曾经成为世界上最广泛使用的密码体制。DES 的出现最终于 1977 年 2 月 15 日被采纳为“非密级”应用的一个标准。 在本文中,...

    Java和C#交叉加密解密方法(DES)(二)

    总结,Java和C#之间使用DES加密解密涉及密钥生成、数据分块、加密解密过程以及编码解码等步骤。为了实现跨平台的兼容性,必须确保所有参数和设置的一致性,包括密钥、IV、填充方式以及加密模式。在实际应用中,还...

Global site tag (gtag.js) - Google Analytics