C#解密java用AES的数据
java的AES加密:
1 /** 2 * 加密 3 * 4 * @param content 需要加密的内容 5 * @param password 加密密钥 6 * @return 7 */ 8 public static String encrypt(String content, String password) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException { 9 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 10 java.security.SecureRandom random = java.security.SecureRandom.getInstance("SHA1PRNG"); 11 random.setSeed(password.getBytes()); 12 kgen.init(128, random); 13 SecretKey secretKey = kgen.generateKey(); 14 byte[] enCodeFormat = secretKey.getEncoded(); 15 16 //如下代码是标准的AES加密处理,C#可以实现 17 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); 18 Cipher cipher = Cipher.getInstance("AES"); 19 byte[] byteContent = content.getBytes("utf-8"); 20 cipher.init(Cipher.ENCRYPT_MODE, key); 21 BASE64Encoder base64Decoder = new BASE64Encoder(); 22 String data= base64Decoder.encode(cipher.doFinal(byteContent)); 23 return data; 24 }
C#解密用的秘钥需要java转换:
1 /** 2 * java的key转换为c#的key 3 * 4 * @param key 5 * @return 6 */ 7 public static String javaKeyToCSharpKey(String key) throws NoSuchAlgorithmException { 8 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 9 java.security.SecureRandom random = java.security.SecureRandom.getInstance("SHA1PRNG"); 10 random.setSeed(key.getBytes()); 11 kgen.init(128, random); 12 SecretKey secretKey = kgen.generateKey(); 13 byte[] enCodeFormat = secretKey.getEncoded(); 14 BASE64Encoder coder = new BASE64Encoder(); 15 16 return coder.encode(enCodeFormat); 17 }
C#解密:
/// <summary> /// 解密java的aes加密数据 /// </summary> /// <param name="data">java的aes加密数据</param> /// <param name="key">java转换后的key</param> /// <returns></returns> public static string decrypt(string data, string key) { byte[] keyArray = Convert.FromBase64String(key); byte[] toEncryptArray = Convert.FromBase64String(data); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; //必须设置为ECB rDel.Mode = CipherMode.ECB; //必须设置为PKCS7 rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray); }

浙公网安备 33010602011771号