AES加密/解密,C# JAVA代码互通(java中aes加密工具)

AES加密/解密,C# JAVA代码互通(java中aes加密工具)

编码文章call10242025-02-01 3:44:2320A+A-

一、C#实现:

C#截图

引用dll

using System.IO;
using System.Security.Cryptography;

c#代码

/// 
/// 加密不带偏移量(AES/CBC/NoPadding)
/// 
/// 
/// 
/// 
public static string Encrypt(string input, string key, string iv)
{
	if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key))
	{
		return input;
	}
	using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
	{
		rijndaelManaged.Mode = CipherMode.CBC;
		rijndaelManaged.Padding = PaddingMode.Zeros;
		rijndaelManaged.FeedbackSize = 128;


		rijndaelManaged.Key = Encoding.UTF8.GetBytes(key);
		rijndaelManaged.IV = Encoding.UTF8.GetBytes(iv);


		ICryptoTransform encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);
		using (MemoryStream msEncrypt = new MemoryStream())
		{
			using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
			{
				using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
				{
					swEncrypt.Write(input);
				}
				byte[] bytes = msEncrypt.ToArray();
				return Convert.ToBase64String(bytes);
			}
		}
	}
}


///   
/// AES解密  
///   
/// 密文字节数组  
/// 返回解密后的字符串  
public static string DesEncrypt(string input, string key, string iv)
{
	if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key))
	{
		return input;
	}
	var buffer = Convert.FromBase64String(input);
	using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
	{
		rijndaelManaged.Mode = CipherMode.CBC;
		rijndaelManaged.Padding = PaddingMode.Zeros;
		rijndaelManaged.FeedbackSize = 128;
		rijndaelManaged.Key = Encoding.UTF8.GetBytes(key);
		rijndaelManaged.IV = Encoding.UTF8.GetBytes(iv);


		ICryptoTransform decryptor = rijndaelManaged.CreateDecryptor(rijndaelManaged.Key, rijndaelManaged.IV);
		using (MemoryStream msEncrypt = new MemoryStream(buffer))
		{
			using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
			{
				using (StreamReader srEncrypt = new StreamReader(csEncrypt))
				{
					return srEncrypt.ReadToEnd();
				}
			}
		}
	}
}

二、JAVA实现

java截图

导入包

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

java代码

//加密方法
// 算法/模式/补码方式
//AES/CBC/NoPadding
private static String encrypt(String data, String key, String iv) {
	try {
		// "算法/模式/补码方式"NoPadding PkcsPadding
		Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
		int blockSize = cipher.getBlockSize();
		byte[] dataBytes = data.getBytes();
		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 Base64().encodeToString(encrypted);
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}
}


//解密方法
private static String desEncrypt(String data, String key, String iv) {
	try {
		byte[] encrypted1 = new Base64().decode(data);
		Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
		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);
		return new String(original).trim();
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}
}



点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4