AES加密和解密,JAVA和C#代码互转,无偏移量

一、Java的AES加密解密代码

复制代码
 1 import javax.crypto.Cipher;
 2 import javax.crypto.spec.SecretKeySpec;
 3 import java.nio.charset.StandardCharsets;
 4 import java.util.Base64;
 5 
 6 public class AesEncryptionUtil {
 7     private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
 8     private static final String SECRET_KEY = "b6bd4cf968a241e2";
 9 
10     public static String encrypt(String plainText) throws Exception {
11         byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8);
12         SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
13 
14         Cipher cipher = Cipher.getInstance(ALGORITHM);
15         cipher.init(Cipher.ENCRYPT_MODE, keySpec);
16 
17         byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
18         return Base64.getEncoder().encodeToString(encrypted);
19     }
20     public static String decrypt(String encryptedText) throws Exception {
21         byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8);
22         SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
23 
24         Cipher cipher = Cipher.getInstance(ALGORITHM);
25         cipher.init(Cipher.DECRYPT_MODE, keySpec);
26 
27         byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);
28         byte[] decrypted = cipher.doFinal(decodedBytes);
29         return new String(decrypted, StandardCharsets.UTF_8);
30     }
31     public static void main(String[] args) throws Exception {
32         String str = encrypt("abc");
33         System.out.println(str);
34         String str1 = decrypt(str);
35         System.out.println(str1);
36     }
37 }
复制代码

菜鸟工具上执行效果

 

二、C#加密解密代码

复制代码
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace HelloWorldApplication
{
   class HelloWorld
   {
      static void Main(string[] args)
      {
         /* Write C# code in this online editor and run it. */
         string key="b6bd4cf968a241e2";
         string enStr= AESEncrypt.Encrypt("abc",key);
         Console.WriteLine(enStr);
          string deStr= AESEncrypt.DecryptByAES(enStr,key);
         Console.WriteLine(deStr);
         Console.ReadKey();
      }
   }
    public class AESEncrypt
{

    /// <summary>
    /// 加密不带偏移量
    /// </summary>
    /// <param name="input"></param>
    /// <param name="key"></param>
    /// <returns></returns>
    public static string Encrypt(string input, string key)
    {
        if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key))
        {
            return input;
        }
        using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
        {
            rijndaelManaged.Mode = CipherMode.ECB;
            rijndaelManaged.Padding = PaddingMode.PKCS7;
            rijndaelManaged.FeedbackSize = 128;

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

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

    /// <summary>  
    /// AES解密  
    /// </summary>  
    /// <param name="input">密文字节数组</param>  
    /// <returns>返回解密后的字符串</returns>  
    public static string DecryptByAES(string input, string key)
    {
        if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key))
        {
            return input;
        }
        var buffer = Convert.FromBase64String(input);
        using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
        {
            rijndaelManaged.Mode = CipherMode.ECB;
            rijndaelManaged.Padding = PaddingMode.PKCS7;
            rijndaelManaged.FeedbackSize = 128;
            rijndaelManaged.Key = Encoding.UTF8.GetBytes(key);

            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();
                    }
                }
            }
        }
    }
}
}
复制代码

菜鸟工具执行效果:

 

三、注意事项

1.key位数:16位。

2.加密模式要对应,可以切换其他模式。Java:AES/ECB/PKCS5Padding,C#:CipherMode.ECB/PaddingMode.PKCS7

3.这里是一种没有偏移量的写法,有偏移量就加上偏移量。

posted @   随意听风  阅读(454)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
TOP
点击右上角即可分享
微信分享提示