• des加密解密JAVA与.NET互通实例


    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 + "<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反射机制DOME
    Contos7 装bcm4312无线网卡驱动
    windows8.1+centos7双系统(装完centos后无win8引导)
    request+response
    HTTP协议+servlet配置
    类加载和反射
    线程池+线程安全
    IO流之Properties(String键值对)+序列流+打印流+commons-IO(最终流程)
    IO流之字节流 +字符流 (复制文件)
    IO流
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/8301578.html
Copyright © 2020-2023  润新知