关于AES用java加密后,用c#解密的函数对照
Java解密函数
public static String DecodeAES(String text, String key, String iv) { // 1.构造密钥生成器,指定为 AES 算法,不区分大小写 KeyGenerator keygen = KeyGenerator.getInstance("AES"); // 新增下面两行,处理 Linux 操作系统下随机数生成不一致的问题 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(key.getBytes()); keygen.init(128, secureRandom); // 3.产生原始对称密钥 SecretKey original_key = keygen.generateKey(); // 4.获得原始对称密钥的字节数组 byte[] raw = original_key.getEncoded(); // 5.根据字节数组生成 AES 密钥 SecretKey key = new SecretKeySpec(raw, "AES"); // 6.根据指定算法 AES 自成密码器 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密 // (Decrypt_mode)操作,第二个参数为使用的 KEY //// 指定一个初始化向量 (Initialization vector,IV), IV 必须是 16 位 cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv.getBytes("UTF-8"))); // 8.将加密并编码后的内容解码成字节数组 byte[] byte_content = new BASE64Decoder().decodeBuffer(text); /* * 解密 */ byte[] byte_decode = cipher.doFinal(byte_content); String AES_decode = new String(byte_decode, "utf-8"); return AES_decode; }
C#对应解密函数
public static string DecodeAES(string text, string key, string iv) { //对应java的"AES"配置字符串 var aesManaged = new AesManaged(); //以下几行属性配置对应java的"AES/CBC/PKCS5Padding"配置字符串 aesManaged.Mode = CipherMode.CBC; aesManaged.Padding = PaddingMode.PKCS7; aesManaged.KeySize = 128; aesManaged.BlockSize = 128; byte[] encryptedData = Convert.FromBase64String(text); byte[] pwdBytes = null; //对应java的"SHA1PRNG"配置字符串 using (var sha1 = new SHA1CryptoServiceProvider()) { byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key)); var rd = sha1.ComputeHash(hash); pwdBytes = rd.Take(16).ToArray(); } byte[] keyBytes = new byte[16]; int len = pwdBytes.Length; if (len > keyBytes.Length) len = keyBytes.Length; System.Array.Copy(pwdBytes, keyBytes, len); aesManaged.Key = keyBytes; aesManaged.IV = Encoding.UTF8.GetBytes(iv); ICryptoTransform transform = aesManaged.CreateDecryptor(); byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length); return Encoding.UTF8.GetString(plainText); }
本文原创,请勿转载。如需帮助,请联系我。

浙公网安备 33010602011771号