- 浏览: 107585 次
- 性别:
- 来自: 上海
-
最新评论
-
18335864773:
用过一次用pageoffice产品生成excel。其实利用Pa ...
java导出多个excel并打成zip包 -
lujialiang:
writeEmailInfo2Excel() 这个方法怎么写 ...
java导出多个excel并打成zip包 -
zhaokui:
,用到了,太感谢了
DES加密 java与.net可以相互加密解密两种方法 -
fengpy2009:
灰常感谢啊
DES加密 java与.net可以相互加密解密两种方法
通过这个方法可以实现java和C#相互加密与解密 并能保持解密出来一致
方法一:通过.NET的key和VI来生成对应于java的key
java:
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class CryptoTools {
private static final byte[] DESkey = { (byte) 0x15, (byte) 0xE7,
(byte) 0xA1, (byte) 0x22, (byte) 0x96, (byte) 0x8B, (byte) 0x24,
(byte) 0xFA };// 设置密钥,略去
private static final byte[] DESIV = { (byte) 0xCE, (byte) 0x35, (byte) 0x5,
(byte) 0xD, (byte) 0x98, (byte) 0x91, (byte) 0x8, (byte) 0xA };// 设置向量,略去
static AlgorithmParameterSpec iv = null;// 加密算法的参数接口,IvParameterSpec是它的一个实现
private static Key key = null;
public CryptoTools() throws Exception {
DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数
iv = new IvParameterSpec(DESIV);// 设置向量
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂
key = keyFactory.generateSecret(keySpec);// 得到密钥对象
}
public String encode(String data) throws Exception {
Cipher enCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 得到加密对象Cipher
enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 设置工作模式为加密模式,给出密钥和向量
byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8"));
BASE64Encoder base64Encoder = new BASE64Encoder();
return base64Encoder.encode(pasByte);
}
public String decode(String data) throws Exception {
Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
deCipher.init(Cipher.DECRYPT_MODE, key, iv);
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] pasByte = deCipher.doFinal(base64Decoder.decodeBuffer(data));
return new String(pasByte, "UTF-8");
}
public static void main(String[] args) throws Exception {
CryptoTools tools = new CryptoTools();
System.out.println("加密:" + tools.encode("天下"));
System.out.println("解密:" + tools.decode(tools.encode("天下")));
}
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
方法二:通过java的key来生成对应于.NET的key和VI
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Web;
using System.Security.Cryptography;
using System.IO;
namespace DES
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string jiami = textBox1.Text;
textBox2.Text= DESEnCode(jiami, "11111111");
}
public static string DES_Key = "11111111";
#region DESEnCode DES加密
public static string DESEnCode(string pToEncrypt, string sKey)
{
// string pToEncrypt1 = 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()));
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
#endregion
private void button2_Click(object sender, EventArgs e)
{
string jiemi = textBox2.Text;
textBox3.Text = DESDeCode(jiemi,"11111111");
}
}
}
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="aa";
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();
}
}
发表评论
-
获取用户的msn和邮箱联系人列表,支持的邮箱包括hotmail, gmail, yahoo, sohu, sina, 163, 126, tom, yeah,
2012-06-13 14:47 5816http://code.google.com/p/contac ... -
Java操作Cookie
2011-09-02 09:52 1583Java对cookie的操作比较简 ... -
抽象类与接口的区别
2011-08-26 17:12 727abstract class和interface是Ja ... -
java导出多个excel并打成zip包
2011-08-03 10:09 18892这里主要是要针对数据量过大,通过生成多个excel文件并打成一 ... -
poi读取Excel2007文件
2011-06-16 11:16 2233excel2007同之前excel97-2003在存储数据量上 ... -
java读取property.property文件
2011-06-14 09:35 2307import java.io.IOException; im ... -
Java生成excel文件 JXL
2011-05-24 17:13 2368要使用的jar包 jxl-2.5.7.jar ... -
用于输出object对象中的属性值
2011-04-26 10:46 1638import java.lang.reflect.Invoca ... -
java 生成任意位数随机数
2010-07-06 11:16 2080/** * 生成任意位数随机数 * @param ... -
token解决重复提交问题
2009-12-15 15:32 1300如果避免重复提交呢? 请知道的详细说下,或者把文章的链接 ... -
java 获取域名
2009-08-19 14:52 2458import java.util.regex.Matcher; ... -
float类型转int型
2009-02-12 11:03 2370public class test { /** flo ... -
Java开源项目Hibernate包作用详解
2008-12-22 11:27 862Hibernate一共包括了23个jar包,令人眼花缭乱。本文 ... -
用java导出Msn好友及分组信息
2008-12-03 11:16 2004网上也有不少例子,但是有些朋友遇到所谓911错误导 ... -
IntelliJIDEA中文问题解决方案
2008-12-03 11:07 1153IntelliJIDEA中文问题解决方案 ... -
读取配置参数的properties文件,路径获取完美解决
2008-12-01 14:01 3244读取配制文件的时候,路径问题让人挠头,使用下面的方法,可方便获 ...
相关推荐
在后端,VB.NET和C#都有内置的加密支持,可以处理DES加密的数据。 在前端进行DES加密的过程通常包括以下步骤: 1. 选择一个密钥:DES算法需要一个64位的密钥,但实际有效位数为56位,因为有7位是校验位。 2. 加密...
下面将详细解释DES加密解密的基本原理、Java实现以及如何在Java与.NET之间进行互通。 1. DES加密算法概述: DES是一种块密码,使用56位的密钥对64位的数据块进行加密。它通过一系列的置换和混淆操作(称为轮函数)...
在这个场景下,"两套java与.net交互数据加密解密代码" 提供了一种安全的数据传输解决方案,确保了信息在不同系统间传递时的安全性。这里主要涉及了两个关键的技术:DES3(Triple DES)加密算法以及CBC(Cipher Block...
本主题探讨的是如何在Java与.NET之间进行加密算法的互操作,以确保数据在传输过程中的安全性。以下是对这个主题的详细阐述: 1. **加密基础**: 加密是一种将明文数据转化为不可读格式的技术,以防止未经授权的...
4. **Java与JavaScript之间的互操作**: 由于Java和JavaScript环境的不同,直接使用代码可能无法直接互换。为了使两者之间能够兼容,我们需要确保使用相同的密钥和填充方式。同时,由于JavaScript可能无法处理字节...
【ASP.NET实现DES加密解密类】的知识点详解 在ASP.NET中,有时我们需要对敏感数据进行加密处理,以确保其在传输或存储时的安全性。DES(Data Encryption Standard)是一种常用的对称加密算法,适合对小量数据进行...
vb.net实现des加密解密算法,winform程序,基于.net framework 2.0开发
这个名为"vb.net加密解密源代码"的项目,是利用Visual Studio 2008开发的一个小型应用程序,提供了对数据进行加解密的功能。下面我们将详细探讨相关的知识点。 1. **VB.NET基础**: VB.NET是微软公司开发的一种...
在.NET框架中,VB.NET...文件夹`Security`很可能包含了示例代码、测试用例或相关的安全工具,这些都可以帮助你深入理解3DES加密在VB.NET中的应用。学习和实践这些知识,对于提升软件的安全性和数据保护能力至关重要。
在ASP.NET框架中,我们可以利用内置的加密解密工具来实现这一功能。以下是一些关于如何在ASP.NET中进行URL参数加密和解密的关键知识点: 1. **加密需求**:在URL中传递敏感信息时,如用户ID、搜索查询或任何个人...
提供Asp.net 2.0文件和字符串的DES算法加密解密. 在项目的Bin文件夹里引用这个文件就可以了,或者直接考到Bin目录里。。专门给初学者用的呵呵。。
VS C#2013 DES加密解密完整源代码 测试平台 visual studio 2013 win8.1 依据网上资源整理,并亲测,并写出窗口供调用演示,原代码全部打包奉上,可供学习使用。 public static string EncryptDES(string ...
des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
在VB中,可以使用.NET框架提供的System.Security.Cryptography命名空间下的DESCryptoServiceProvider类来实现DES加密和解密。 1. **DES加密过程**: - 创建DESCryptoServiceProvider对象,这是VB中实现DES算法的...
本资源提供DES加密解密的方法,大家可以复制该方法运用到各种项目中,简单便捷,快速使用。我这里用的是控制台给大家演示的,大家可以上传到API项目或者MVC等项目中,只需要把自己所需要的参数给提供出来就可
综上所述,DES加密算法在C#.NET 2008中的实现涉及了DESCryptoServiceProvider类的使用,密钥和IV的设置,以及加密和解密过程。虽然DES已不再是最安全的选择,但它仍然是理解对称加密原理的一个重要例子。
本篇将详细介绍如何在网页前端使用JavaScript进行3DES加密,并在后端Java环境中进行解密。 一、3DES加密原理 3DES是DES的加强版,它使用了3个不同的56位密钥,通过3次独立的DES加密过程来提高安全性。具体流程如下...
在Java中实现DES加密和解密是一项常见的任务,通常涉及到`javax.crypto`包中的类和接口。本篇文章将详细阐述DES加密解密的Java实现过程。 首先,我们需要了解DES算法的基本原理。DES是一种块密码,它将明文数据分成...
DES加密方法JAVA和C#交叉加密解密代码