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);
        }

 

posted @ 2017-11-27 22:41  清幽紫竹  Views(179)  Comments(0)    收藏  举报