JAVA、C# DES通用加解密

来源:互联网 发布:c语言boolean的用法 编辑:程序博客网 时间:2024/06/17 18:16

原文:http://www.cnblogs.com/Alex80/p/5261710.html

JAVA用DES加密C#用DES解密的实现,C#用DES加密JAVA用DES解密(保持key一致)
JAVA code:

    //加密    public static String encrypt(String value,String key) {        String result = "";        try {            value = java.net.URLEncoder.encode(value, "utf-8");            result = toHexString(encryptTmp(value, key)).toUpperCase();        } catch (Exception ex) {            ex.printStackTrace();            return "";        }        return result;    }    // 解密    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[] encryptTmp(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 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();    }

C# code:

public static string Encode(string str, string key)  {      try      {          DESCryptoServiceProvider provider = new DESCryptoServiceProvider();          provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));          provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));          byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str);          MemoryStream stream = new MemoryStream();          CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);          stream2.Write(bytes, 0, bytes.Length);          stream2.FlushFinalBlock();          StringBuilder builder = new StringBuilder();          foreach (byte num in stream.ToArray())          {              builder.AppendFormat("{0:X2}", num);          }          stream.Close();          return builder.ToString();      }      catch (Exception) { return "xxxx"; }  }public static string Decode(string str, string key)  {      try      {          DESCryptoServiceProvider provider = new DESCryptoServiceProvider();          provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));          provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));          byte[] buffer = new byte[str.Length / 2];          for (int i = 0; i < (str.Length / 2); i++)          {              int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10);              buffer[i] = (byte)num2;          }          MemoryStream stream = new MemoryStream();          CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);          stream2.Write(buffer, 0, buffer.Length);          stream2.FlushFinalBlock();          stream.Close();          return Encoding.GetEncoding("GB2312").GetString(stream.ToArray());      }      catch (Exception) { return ""; }  }
原创粉丝点击