- 浏览: 105350 次
- 性别:
- 来自: 上海
最新评论
-
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 5721http://code.google.com/p/contac ... -
Java操作Cookie
2011-09-02 09:52 1552Java对cookie的操作比较简 ... -
抽象类与接口的区别
2011-08-26 17:12 693abstract class和interface是Ja ... -
java导出多个excel并打成zip包
2011-08-03 10:09 18653这里主要是要针对数据量过大,通过生成多个excel文件并打成一 ... -
poi读取Excel2007文件
2011-06-16 11:16 2180excel2007同之前excel97-2003在存储数据量上 ... -
java读取property.property文件
2011-06-14 09:35 2261import java.io.IOException; im ... -
Java生成excel文件 JXL
2011-05-24 17:13 2337要使用的jar包 jxl-2.5.7.jar ... -
用于输出object对象中的属性值
2011-04-26 10:46 1604import java.lang.reflect.Invoca ... -
java 生成任意位数随机数
2010-07-06 11:16 2050/** * 生成任意位数随机数 * @param ... -
token解决重复提交问题
2009-12-15 15:32 1247如果避免重复提交呢? 请知道的详细说下,或者把文章的链接 ... -
java 获取域名
2009-08-19 14:52 2409import java.util.regex.Matcher; ... -
float类型转int型
2009-02-12 11:03 2333public class test { /** flo ... -
Java开源项目Hibernate包作用详解
2008-12-22 11:27 829Hibernate一共包括了23个jar包,令人眼花缭乱。本文 ... -
用java导出Msn好友及分组信息
2008-12-03 11:16 1944网上也有不少例子,但是有些朋友遇到所谓911错误导 ... -
IntelliJIDEA中文问题解决方案
2008-12-03 11:07 1107IntelliJIDEA中文问题解决方案 ... -
读取配置参数的properties文件,路径获取完美解决
2008-12-01 14:01 3198读取配制文件的时候,路径问题让人挠头,使用下面的方法,可方便获 ...
相关推荐
javascript前端DES加密,VB.NET、C#后端服务器解密,经常用在账号密码验证的界面,避免用户凭据明文传输
DES3 CBC和DES3 ECB,网上找的两套java与.net交互数据加密解密代码,想要哪种就可以分离出来用。
vb.net实现des加密解密算法,winform程序,基于.net framework 2.0开发
des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现
提供Asp.net 2.0文件和字符串的DES算法加密解密. 在项目的Bin文件夹里引用这个文件就可以了,或者直接考到Bin目录里。。专门给初学者用的呵呵。。
本资源提供DES加密解密的方法,大家可以复制该方法运用到各种项目中,简单便捷,快速使用。我这里用的是控制台给大家演示的,大家可以上传到API项目或者MVC等项目中,只需要把自己所需要的参数给提供出来就可
java和javascript加密解密,可相互加密解密,内含javascript代码和java代码,解压即用,自定义密钥
DES加密方法JAVA和C#交叉加密解密代码
VS C#2013 DES加密解密完整源代码 测试平台 visual studio 2013 win8.1 依据网上资源整理,并亲测,并写出窗口供调用演示,原代码全部打包奉上,可供学习使用。 public static string EncryptDES(string ...
本资源为 php与vb.net对应的des加密解密方式的代码。本人亲自测试过可以相互解密加密。即通过php加密的内容,可以使用vb.net进行解密出来。
主要介绍了des加密解密JAVA与.NET互通实例,大家参考使用吧
java的DES加密解密:用于密码在数据库的加密,解码类
Java实现des加密解密算法,des加密解密算法
加密解密,此文件主要是在ASP.NET中对传入的数据加密
DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...
3DES加密解密java版+js版 3DES加密解密java版+js版 3DES加密解密java版+js版 3DES加密解密java版+js版
des加密解密算法,通过DES加密解密实现一个String字符串的加密和解密.
带界面的DES加密解密java源码,可以实现加密解密和显示每一步的过程。