java和.net之间互通的AES加解密

  1. .net代码
public class AesHelper
   {
 	 public static string Encry(string text, string key)
       {
           string iv = key;
           if (key.Length > 16)
           {
               // IV为商户MD5密钥后16位
               iv = key.Substring(key.Length - 16);
               // RES的KEY 为商户MD5密钥的前16位
               key = key.Substring(0, 16);
           }
           return EncodeAES(text, key,iv);
       }
 
       /// <summary>AES加密</summary> 
       /// <param name="text">明文</param> 
       /// <param name="key">密钥,长度为16的字符串</param> 
       /// <param name="iv">偏移量,长度为16的字符串</param> 
       /// <returns>密文</returns> 
       public static string EncodeAES(string text, string key, string iv)
       {
    
           RijndaelManaged rijndaelCipher = new RijndaelManaged();
           rijndaelCipher.Mode = CipherMode.CBC;
           rijndaelCipher.Padding = PaddingMode.PKCS7;
           rijndaelCipher.KeySize = 128;
           rijndaelCipher.BlockSize = 128;
           byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
           byte[] keyBytes = new byte[16];
           int len = pwdBytes.Length;
           if (len > keyBytes.Length)
               len = keyBytes.Length;
           System.Array.Copy(pwdBytes, keyBytes, len);
           rijndaelCipher.Key = keyBytes;
           rijndaelCipher.IV = Encoding.UTF8.GetBytes(iv);
           ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
           byte[] plainText = Encoding.UTF8.GetBytes(text);
           byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
           return Convert.ToBase64String(cipherBytes);
       }
 
       /// <summary>AES解密</summary> 
       /// <param name="text">密文</param> 
       /// <param name="key">密钥,长度为16的字符串</param> 
       /// <param name="iv">偏移量,长度为16的字符串</param> 
       /// <returns>明文</returns> 
       public static string DecodeAES(string text, string key, string iv)
       {
           RijndaelManaged rijndaelCipher = new RijndaelManaged();
           rijndaelCipher.Mode = CipherMode.CBC;
           rijndaelCipher.Padding = PaddingMode.PKCS7;
           rijndaelCipher.KeySize = 128;
           rijndaelCipher.BlockSize = 128;
           byte[] encryptedData = Convert.FromBase64String(text);
           byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
           byte[] keyBytes = new byte[16];
           int len = pwdBytes.Length;
           if (len > keyBytes.Length)
               len = keyBytes.Length;
           System.Array.Copy(pwdBytes, keyBytes, len);
           rijndaelCipher.Key = keyBytes;
           rijndaelCipher.IV = Encoding.UTF8.GetBytes(iv);
           ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
           byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
           return Encoding.UTF8.GetString(plainText);
       }
   }

2.java代码
key : 双方约定加解密key

import org.apache.commons.codec.binary.Base64;


public class AesUtil {
 
    // 加密
    public static String encry(String content, String key) throws Exception {
        String IV = key;
        if (key.length() > 16) {
            // IV为商户MD5密钥后16位
            IV = key.substring(key.length() - 16);
            // RES的KEY 为商户MD5密钥的前16位
            key = key.substring(0, 16);
        }
 
        return encryptData(content, key, IV);
    }
 
    // 加密
    public static String desEncry(String content, String key) throws Exception {
        String IV = key;
        if (key.length() > 16) {
            // IV为商户MD5密钥后16位
            IV = key.substring(key.length() - 16);
            // RES的KEY 为商户MD5密钥的前16位
            key = key.substring(0, 16);
        }
        return decryptData(content, key, IV);
    }
 
    /**
     * aes 加密
     *
     * @param data
     * @return
     */
    public static String encryptData(String data, String key, String IV) throws Exception {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            byte[] dataBytes = data.getBytes("UTF-8");
            int plaintextLength = dataBytes.length;
            // if (plaintextLength % blockSize != 0) {
            // plaintextLength = plaintextLength + (blockSize - (plaintextLength
            // % blockSize));
            // }
            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(IV.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);
            return new String(Base64.encodeBase64(encrypted));
        } catch (Exception e) {
            throw e;
        }
 
    }
 
    /**
     * aes 解密
     *
     * @param data
     *            密文
     * @return
     */
    public static String decryptData(String data, String key, String IV) throws Exception {
        try {
            byte[] encrypted1 = Base64.decodeBase64(data.getBytes("UTF-8"));
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(IV.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original, "UTF-8");
            return originalString;
        } catch (Exception e) {
            throw e;
        }
    }
     
    public static void main(String[] args) throws Exception {
        String a = encry("admin", "EFNDMJS3KD23DKRF");
        System.out.println(a);
         
    }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值