zoukankan      html  css  js  c++  java
  • Java与.NET DES加密解密互转

    上代码:

    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: 在此处添加构造函数逻辑   
            //   
        }   
    }
  • 相关阅读:
    基于Python的人脸动漫转换
    let 与 var的区别
    【LeetCode】汇总
    【HDU】4632 Palindrome subsequence(回文子串的个数)
    【算法】均匀的生成圆内的随机点
    【LeetCode】725. Split Linked List in Parts
    【LeetCode】445. Add Two Numbers II
    【LeetCode】437. Path Sum III
    【LeetCode】222. Count Complete Tree Nodes
    【LeetCode】124. Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/wifi/p/3809405.html
Copyright © 2011-2022 走看看