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