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 ""; } }
阅读全文
0 0
- JAVA、C# DES通用加解密
- PHP与C#通用 DES 加解密
- java 与 c# 3des 加解密
- java 与 c# 3des 加解密
- DES加解密(Java)
- Java Des加解密
- java des加解密
- java des 加解密
- java DES加解密
- DES加解密(Java)
- Java DES 加解密字符串、文件 工具类通用
- 一个java的DES加解密类转换成C#
- java 3DES 加解密
- java des加解密算法
- Java实现DES加解密
- java des 加解密方法
- java des 加解密 通用版
- Java,C#的DES加解密DES(非base64 可url传递)
- TNS-12545: Connect failed because target host or object does not exist
- 4. Median of Two Sorted Arrays 详细解答
- Choosing the Right Cisco Compatible SFP Transceivers for Your Network
- 百练_4045:与3和5无关的数
- getParameter获取整数值
- JAVA、C# DES通用加解密
- MySQL5.7.19Win10免安装配置+登录+问题解决
- 百练_4067:回文数字(Palindrome Number)
- Problem 16 Power digit sum
- AR 广告大屏UI界面搭建二
- 可爱小仓鼠代码,放在网页里很可爱
- ORA-00838: Specified value of MEMORY_TARGET is too small
- 微信小程序中点击View中任何位置都可以触发相应事件的解决办法
- javaseday04(数组容器,排序,进制转换)