参考网上其他人的代码:
java版本:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
public class Des {
private byte[] desKey;
//解密数据
public static String decrypt(String message,String key) throws Exception {
byte[] bytesrc =convertHexString(message);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte);
}
public static byte[] encrypt(String message, String key)
throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
return cipher.doFinal(message.getBytes("UTF-8"));
}
public static byte[] convertHexString(String ss)
{
byte digest[] = new byte[ss.length() / 2];
for(int i = 0; i < digest.length; i++)
{
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte)byteValue;
}
return digest;
}
public static void main(String[] args) throws Exception {
String key = "11111111";
String value="我们都是中国人 ";
String jiami=java.net.URLEncoder.encode(value, "utf-8").toLowerCase();
System.out.println("加密数据:"+jiami);
String a=toHexString(encrypt(jiami, key)).toUpperCase();
System.out.println("加密后的数据为:"+a);
String b=java.net.URLDecoder.decode(decrypt(a,key), "utf-8") ;
System.out.println("解密后的数据:"+b);
}
public static String toHexString(byte b[]) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2)
plainText = "0" + plainText;
hexString.append(plainText);
}
return hexString.toString();
}
}
.net 版本:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Security.Cryptography;
using System.IO;
using System.Text;
public class TestDes{
//cookies加密密钥
public static string DES_Key = "11111111";
#region DESEnCode DES加密
public static string DESEnCode(string pToEncrypt, string sKey)
{
pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);
//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
#endregion
#region DESDeCode DES解密
public static string DESDeCode(string pToDecrypt, string sKey)
{
// HttpContext.Current.Response.Write(pToDecrypt + "<br>" + sKey);
// HttpContext.Current.Response.End();
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));
}
#endregion
public TestDes()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
分享到:
相关推荐
本文将详细介绍如何在Java和.NET中实现互操作的DES加密解密,并提供两种不同的方法。 **方法一:使用标准库** 1. **Java实现**: - 引用`javax.crypto`包中的`Cipher`、`KeyGenerator`和`SecretKey`类。 - 创建`...
在这个场景下,"两套java与.net交互数据加密解密代码" 提供了一种安全的数据传输解决方案,确保了信息在不同系统间传递时的安全性。这里主要涉及了两个关键的技术:DES3(Triple DES)加密算法以及CBC(Cipher Block...
实现后,务必进行详尽的测试,确保在所有可能的输入条件下,Java和.NET都能正确地解密对方加密的数据。这通常涉及到不同长度的明文、不同的密钥和填充模式等。 总之,Java和.NET之间的加密算法交换涉及多个层面,...
在Java和.NET之间进行互通时,DES加密解密的实现是至关重要的,因为这允许两个平台之间的应用程序能够共享加密过的数据并正确地解密。下面将详细解释DES加密解密的基本原理、Java实现以及如何在Java与.NET之间进行...
本资源提供的是一套完整的JavaScript实现,能够与ASP.NET和JAVA平台的3DES加密解密及Base64编码解码功能保持兼容。 首先,3DES的工作原理是在DES的基础上增加了一次加密过程,即使用同一个密钥进行三次加密,这大大...
总的来说,"三平台通用加密算法"是实现跨平台数据安全的关键技术,涉及到了Java、.Net和Objective-C的加密API使用,以及加密过程中的编码解码、密钥管理和错误处理等多个环节。理解和掌握这些知识点对于开发安全的多...
C# JAVA nodejs通用的AES加密解密算法,考虑到实际使用过程中由于客户端和服务端使用的语言不一样而又需要对数据进行加密和解密的情况,特此总结了C# JAVA nodejs通用的AES加密解密算法,供需要者参考。
### Java与C#中的DES加密解密技术 #### 一、概述 在现代软件开发中,数据的安全性至关重要。为了确保数据在传输过程中的安全,加密技术被广泛应用。其中,数据加密标准(Data Encryption Standard,简称DES)是一...
本篇文章将详细讲解如何在Java、C#和PHP这三个不同的编程语言环境中实现DES加密,并确保它们之间的互通性。在实际项目中,这种跨平台的加密互通能力对于多语言系统的集成至关重要。 首先,DES是一种块加密算法,它...
在提供的压缩包文件中,我们看到几个关键的文件名,如`Des.java`、`SubKey.java`和`FileDES.java`,这些文件很可能是实现DES加密解密功能的Java类。下面将分别解释这些可能包含的内容: 1. `Des.java`: 这个文件很...
Java实现三重DES文件加密,有界面,并可实现任意文件的加密。里面是一个源程序,以及它生成的类文件和两...在cmd窗口中运行java des.FileEncrypter即可出现加密界面,这是三重DES加密,密钥可自行输入,也可随即生成。
在Java中,`java.security`包提供了`KeyPairGenerator`和`Cipher`类来生成密钥对和执行加密解密操作。RSA的安全性基于大整数分解的难度,因此其密钥长度通常较长,适合于小量数据的加密或用于交换对称密钥。 3. **...
在IT行业中,数据的安全传输...通过遵循以上原则,并在实际应用中进行测试,可以确保Android和C#的DES加密解密结果完全一致。在实际项目中,还需要考虑性能、安全性和代码可维护性等因素,选择合适的实现策略和加密库。
DESService.cs可能是C#代码中实现DES加密服务的部分,可能包含了加密和解密的方法,以及可能的与Java通信的接口。DESUtils.java则可能是Java端用于执行相同功能的工具类,包含DES加密和解密的函数。 以下是对DES...
在Java中,我们可以利用`javax.crypto`包中的类来实现DES加密和解密。例如,`Cipher`类用于执行加密和解密操作,`KeyGenerator`用于生成DES密钥,而`SecretKey`接口则代表了DES密钥。 在客户端通信中,通常采用...
文档"Java加密C#解密 DES算法.doc"主要涉及了两个编程语言——Java和C#之间使用DES(Data Encryption Standard)算法进行加密和解密的实现。DES是一种经典的对称加密算法,它使用一个56位的密钥来对数据进行加密和...
在Android中,我们可以使用Java的`javax.crypto`包来实现DES加密和解密。 描述中提到的".net自带的des加密是一样的",意味着Android上的DES实现与.NET框架中的DES加密算法在原理和效果上是兼容的。这意味着,如果你...
在实际的J2EE项目中,这些方法可以集成到服务器端的过滤器或拦截器中,自动处理所有出站和入站的URL参数加密解密。 8. **扩展:加密库的使用**: 除了基础的Java加密API,还可以使用第三方库,如Apache Commons ...
根据提供的文件信息,本文将详细...通过上述分析,我们可以了解到如何使用Java实现基于DES算法的CBC模式加密解密过程。需要注意的是,尽管DES算法在安全性方面存在一定的局限性,但在特定场景下仍具有一定的实用价值。
这些知识点在提供的Java加密解密工具包中可能有所体现,通过这些工具,开发者可以轻松地集成安全功能到他们的应用程序中,确保数据的安全传输和存储。理解并熟练运用这些概念,有助于构建更健壮和安全的Java系统。