`

Java和C#通过DES加密得到相同数据

 
阅读更多

早晨的时候,一个朋友在MSN上问我.NET的DES算法实现。我说,这不是很简单的,.NET Framework都有现成的封装直接用就可以了。仔细一问,原来他要和一个.NET实现的系统进行数据交换,他的DES的Java实现出来的结果和.NET的不一样。所以,他怀疑.NET那边的实现有问题。好吧,程序员们都是如此自负,自己从来都不会出问题的-_-||

DES算是相当成熟的算法了,就不再赘述了。要加密结果一样,其实很简单,只要IV值和密钥一样,出来的结果应该都是一样的。看到他那边的.NET实现之后,IV是一个空的byte数组,Java这边只要也把IV的值设为空的byte数组的,结果应该就是一样的。思路就是这样的,下面就是实现了。

.NET的DES算法实现

根据密钥加密字符串

1
2
3
4
5
6
7
8
9
10
11
12
public static string EncryptDES(string encryptString, string encryptKey)
{
    DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
    byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    MemoryStream mStream = new MemoryStream();
    CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, new byte[8]), CryptoStreamMode.Write);
    cStream.Write(inputByteArray, 0, inputByteArray.Length);
    cStream.FlushFinalBlock();
 
    return Convert.ToBase64String(mStream.ToArray());
}

根据密钥解密字符串

1
2
3
4
5
6
7
8
9
10
11
public static string DecryptDES(string decryptString, string decryptKey)
{
    byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
    byte[] inputByteArray = Convert.FromBase64String(decryptString);
    DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
    MemoryStream mStream = new MemoryStream();
    CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, new byte[8]), CryptoStreamMode.Write);
    cStream.Write(inputByteArray, 0, inputByteArray.Length);
    cStream.FlushFinalBlock();
    return Encoding.UTF8.GetString(mStream.ToArray());
}

Java的DES算法实现

根据密钥加密字符串

1
2
3
4
5
6
7
8
9
public static String encryptDES(String encryptString, String encryptKey) throws Exception {
	IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);
	SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");
	Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
	cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
	byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
 
	return new BASE64Encoder().encode(encryptedData);
}

根据密钥解密字符串

1
2
3
4
5
6
7
8
9
10
public static String decryptDES(String decryptString, String decryptKey) throws Exception {
	byte[] byteMi = new BASE64Decoder().decodeBuffer(decryptString);
	IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);
	SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");
	Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
	cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
	byte decryptedData[] = cipher.doFinal(byteMi);
 
	return new String(decryptedData);
}

其实这个问题并不难解决,只是网上一些DES的算法的例子代码并没有用到IV,容易让人产生误解。

分享到:
评论

相关推荐

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption ...通过理解这些知识点,开发者可以在Java和C#之间实现3DES的兼容加密,确保数据在不同系统间的无缝安全交换。

    DES加密DEMO(C#与JAVA)

    本DEMO提供了C#和JAVA两种编程语言下的DES加密和解密实现,这对于理解DES算法及其在实际开发中的应用非常有帮助。 1. **DES算法原理** - **结构**:DES算法基于Feistel网络,它将明文分为左右两半,通过一系列的...

    DES加密方法JAVA和C#交叉加密解密代码

    DES加密方法JAVA和C#交叉加密解密代码

    DES 加密 JAVA与C# 交互 绝对可用

    标题中的“DES加密JAVA与C#交互绝对可用”意味着我们将探讨如何在Java和C#之间使用DES(Data Encryption Standard)加密算法进行数据安全传输。DES是一种广泛应用的块密码,使用56位密钥对64位的数据块进行加密。...

    Java、C#与PHP的DES加密互通代码(测试通过)

    在提供的"Java、C#与PHP的DES加密互通代码(测试通过).txt"文件中,应该包含了示例代码和测试用例,演示了如何在这些环境中正确地进行DES加密并验证互通性。 总的来说,实现Java、C#和PHP之间的DES加密互通涉及...

    c#和java通用DES加密.docx

    在本文中,我们将探讨如何在C#和Java之间实现通用的DES加密和解密。C#和Java都提供了对DES算法的支持,但它们的实现略有不同。下面我们将详细解释C#和Java中的DES加密过程,并展示如何创建可互操作的加密类。 首先...

    C#和Java实现互通的RSA&DES加解密算法

    本话题主要关注如何在C#和Java之间通过RSA和DES加密算法实现数据的安全互通。RSA是一种非对称加密算法,适用于小量数据加密,如密钥交换;而DES是对称加密算法,适合大量数据的快速加密,但安全性相对较低。 首先,...

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

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

    java c# des加密解密

    ### Java与C#中的DES加密解密技术 #### 一、概述 在现代软件开发中,数据的安全性至关重要。为了确保数据在传输过程中的安全,加密技术被广泛应用。其中,数据加密标准(Data Encryption Standard,简称DES)是一...

    C#与JAVA平台通用DES

    C#与JAVA通用DES: 1、C#平台上的加密与解密 2、JAVA平台上的加密与解密 3、C#平台上的加密,能在JAVA平台上解密 4、JAVA平台上的加密,能在C#平台上解密 这个工具类,是基于平台的,不调用任何第三方软件,已经运用...

    c#3DES双倍长加密解密

    c#的3DES加密解密强制要求不能使用简单的密钥,这里按照3DES双倍长的算法原理,实现双倍长的加密解密

    java与C#的PBE加密

    总的来说,PBEWithMD5AndDES在Java和C#中都是为了保护数据安全,通过用户提供的密码生成加密密钥,同时结合MD5哈希和DES加密算法。尽管MD5在当今被认为是不安全的,但它在PBE中仍被广泛使用,主要是因为兼容性和历史...

    C# RSA加密、支持JAVA格式公钥私钥

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在网络通信中的数据加密和数字签名。C#和Java作为两种常见的编程语言,都提供了实现RSA算法的库和接口。这个压缩包中的内容看起来是针对C#环境...

    android端写的DES加密解密代码对应C#写的加密解密代码。两者加密解密结果完全一致

    在Android平台上,我们可以通过Java的`javax.crypto`包来实现DES加密和解密。主要涉及`Cipher`类的初始化、密钥的生成以及加密解密操作。Android代码通常会使用`KeyGenerator`生成密钥,`Cipher`进行加密和解密,...

    3DES-ECB模式加密,可以与C#和Java互通

    在描述中提到的“可以与C#和Java互通”,意味着实现的3DES-ECB加密代码在C/C++环境下编译运行后,其加密结果应该与C#和Java平台上的3DES-ECB加密算法得到的结果一致。这通常需要确保所有平台都遵循相同的密钥、初始...

    C# 对接 Java 3des md5WithRsa

    在IT行业中,跨平台通信和数据安全是两个重要的议题,特别是在C#和Java这两种不同的编程语言之间进行数据交互时。本篇文章将详细讲解如何在C#中实现与Java的3DES加密以及MD5withRSA签名的对接。 3DES(Triple Data ...

    Java中3DES加密与C#兼容

    "Java中3DES加密与C#兼容"这个主题就是关注如何在Java和C#这两种不同的编程语言中实现相同的数据加密机制,确保数据的安全传输。3DES(Triple DES)是一种广泛使用的对称加密算法,它通过三次应用DES(Data ...

    Java加密C#解密 DES算法.doc

    文档"Java加密C#解密 DES算法.doc"主要涉及了两个编程语言——Java和C#之间使用DES(Data Encryption Standard)算法进行加密和解密的实现。DES是一种经典的对称加密算法,它使用一个56位的密钥来对数据进行加密和...

Global site tag (gtag.js) - Google Analytics