一、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 @ 2024-07-30 11:09 随意听风 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 需要先配置跨域的信息,再设置ip限流 app.UseCors(AppSettings.app(new string[] { "Startup", "Cors", "PolicyName" }));//跨域配置 app.UseIpLimitMiddle();//IP限流配置 阅读全文
posted @ 2024-07-11 17:53 随意听风 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 一、环境 开发环境: Microsoft Visual Studio Professional 2022 (2) (64 位) - Current版本 17.7.7 .net core 6.0 AngleSharp 1.1.2 AngleSharp.Js 0.15.0 Downloder 3.0.6 阅读全文
posted @ 2024-04-29 17:37 随意听风 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 现在有一个HttpHelper类 public async Task<string> ExecuteAsync<H>(H header) where H : class, new() { var client = new RestClient(_url); if (!string.IsNullOrW 阅读全文
posted @ 2024-04-01 11:33 随意听风 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 一、环境:操作系统Windows 11 家庭中文版64位 二、sqlite下载地址及版本 https://www.sqlite.org/download.html 三、安装 1.下载后解压到文件夹如:D:\tools\sqlite3 2.配置sqlite环境:我的电脑-右键-属性 四、简单使用 wi 阅读全文
posted @ 2024-03-28 10:47 随意听风 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 一、一张图了解查询sql执行顺序 二、SQL执行顺序口诀FOJWGHDSOL 执行顺序看字母锁定键盘轴心区首先锚点FJ(FROM/JOIN)紧跟兄弟GH (GROUP BY/HAVING)再看姐妹DS (DISTINCT/SELECT)Last字母是L (LIMT)最为特殊OW (ON/ORDER 阅读全文
posted @ 2024-03-26 11:54 随意听风 阅读(547) 评论(0) 推荐(0) 编辑
摘要: SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, ( 阅读全文
posted @ 2024-03-21 15:22 随意听风 阅读(18) 评论(0) 推荐(0) 编辑
摘要: B-tree是一种用来搜索大量数据的结构。它是40多年前发明的,但它仍然被大多数现代数据库所使用。尽管有较新的索引结构,如LSM树,但B树在处理大多数数据库查询时仍然是无与伦比的。 下面我们来了解B-tree是如何组织数据的,以及它是如何执行搜索查询的。 一、起源 为了理解B-tree,让我们首先了 阅读全文
posted @ 2024-03-01 12:07 随意听风 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 一、环境 .net core 6.0 vs2022 控制台应用程序 Nuget引入: AngleSharp 1.1.0 用于HTML解析 Downloader 3.0.6 用于下载文件 ShellProgressBar 5.2.0 用于进度条显示 二、效果 三、相关代码 1.Program.cs u 阅读全文
posted @ 2024-02-28 11:10 随意听风 阅读(280) 评论(0) 推荐(0) 编辑
摘要: FluentValidation.AspNetCore11.0.0.0 .NET Core 6.0 1.为什么使用FluentValidation? 一个原因是自定义属性验证代码要写很多,模型中的每个需要验证的字段,都需要独立的编写相应的自定义属性。FluentValidation对字段的验证代码需 阅读全文
posted @ 2024-02-04 17:13 随意听风 阅读(277) 评论(0) 推荐(0) 编辑
TOP
点击右上角即可分享
微信分享提示