博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java与.NET DES加密解密互转
阅读量:7120 次
发布时间:2019-06-28

本文共 5605 字,大约阅读时间需要 18 分钟。

上代码:

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 = "12345678";           String value="test1234 ";           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 = "12345678";       #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);                      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 + "
" + 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: 在此处添加构造函数逻辑 // } }

 

转载地址:http://jhnel.baihongyu.com/

你可能感兴趣的文章
SkinSharp用法
查看>>
大抚州泡粉
查看>>
【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值
查看>>
简易实现 TextView单行文本水平触摸滑动效果
查看>>
android调用系统相机拍照并保存在本地
查看>>
Node.js链式回调
查看>>
IOS中延时执行的几种方式的比较
查看>>
sql中having、group by用法及常用聚合函数
查看>>
用swift开发仪表盘控件(一)
查看>>
使用CAShapeLayer与UIBezierPath画出想要的图形
查看>>
Spring bean注入方式
查看>>
领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处
查看>>
Java的反射机制(Reflection)
查看>>
李洪强iOS经典面试题156 - Runtime详解(面试必备)
查看>>
转 文件路径相关的字符串操作
查看>>
mysql 5.6 分区与不分区的区别
查看>>
Material Theme
查看>>
mysql 字符串函数
查看>>
为什么zookeeper集群中节点配置个数是奇数个?
查看>>
TCP/IP协议详解内容总结(怒喷一口老血)
查看>>