AES加解密(C#和JAVA互通)

对接接口中遇到一个棘手的问题:甲方使用java开发,通过AES加密数据,我方使用C#开发,Java的代码和C#的代码无法互通。

 1         /// <summary>
 2         /// AES加密(128位,密码模式ECB,填充类型PKCS5Padding或者PKCS7Padding。注:ECB模式不需要初始化向量iv。)
 3         /// </summary>
 4         /// <param name="str"></param>
 5         /// <param name="key"></param>
 6         /// <returns></returns>
 7         public static string AES_Encrypt(string str, string key)
 8         {
 9             if (string.IsNullOrEmpty(str)) return null;
10             Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
11 
12             RijndaelManaged rm = new RijndaelManaged
13             {
14                 Key = Convert.FromBase64String(key),
15                 Mode = CipherMode.ECB,
16                 Padding = PaddingMode.PKCS7
17             };
18 
19             ICryptoTransform cTransform = rm.CreateEncryptor();
20             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
21             StringBuilder ret = new StringBuilder();
22             foreach (byte b in resultArray.ToArray())
23             {
24                 ret.AppendFormat("{0:X2}", b);
25             }
26             return Convert.ToBase64String(resultArray, 0, resultArray.Length);
27         }
 1         /// <summary>
 2         /// AES解密(128位,密码模式ECB,填充类型PKCS5Padding或者PKCS7Padding。注:ECB模式不需要初始化向量iv。)
 3         /// </summary>
 4         /// <param name="toDecrypt"></param>
 5         /// <param name="key"></param>
 6         /// <returns></returns>
 7         public static string AES_Decrypt(string toDecrypt, string key)
 8         {
 9             byte[] keyArray = Convert.FromBase64String(key); //将TestGenAESByteKey类输出的字符串转为byte数组
10             byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
11             RijndaelManaged rDel = new RijndaelManaged();
12             rDel.Key = keyArray;
13             rDel.Mode = CipherMode.ECB;        //必须设置为ECB
14             rDel.Padding = PaddingMode.PKCS7;  //必须设置为PKCS7
15             ICryptoTransform cTransform = rDel.CreateDecryptor();
16             byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
17             return UTF8Encoding.UTF8.GetString(resultArray);
18 
19         }

 

相关推荐:

GraalVM 中 Java Map 与 Python 的双向互操作实践

本文详解如何在GraalVMPolyglot环境中安全、高效地将JavaMap传递给Python脚本,调用其方法获取值,并将处理结果(如新Map)返回Java,重点解决AttributeError:foreignobjecthasnoattribute'items'等常见互操作异常。 本文详解如何在...

PySpark Java Gateway Exited 错误的根源与解决方案

本文详解pyspark报错`[java_gateway_exited]javagatewayprocessexitedbeforesendingitsportnumber`的根本原因——虚拟环境(venv)隔离导致`java_home`和系统级java路径未被正确继承,并提供可落地的修复步骤与最佳实...

python与java用途区别有哪些

Python适合快速开发、数据科学、AI建模、轻量Web服务及自动化脚本;Java适合大型企业系统、Android开发、高并发中间件及需长期稳定维护的场景。 Python和Java虽然都能做通用开发,但实际用起来分工很明确——不是“哪个更好”,而是“谁更合适”。关键看你要解决什么问题、在什么环境里跑...

Python配置文件加载_ini与json解析【教程】

应根据实际需求选择:ini适合分节、带注释的简单配置(如数据库连接),用configparser读取;json适合嵌套复杂、跨语言共享的配置(如API参数),用json模块加载。 Python读取配置文件,ini和json是最常用的两种格式。选哪种不取决于“哪个更好”,而要看实际需求:ini更适合分...

redis怎么使用java

使用redisjava库需:1.添加依赖(jedis3.6.3);2.连接到redis服务器(指定主机和端口);3.进行基本操作(设置/获取值、检查键是否存在、删除键);4.执行复杂操作(哈希表、列表、集合、有序集合);5.发布/订阅消息(使用jedispubsub);6.关闭连接(jedis.cl...

10 对 -3 取余,结果是 1 还是 -2?Java 和 MySQL 的结果为何不同?

10对-3取余结果:1还是-2? 问题: 对-3取余时,10的余数是1还是-2?使用java和mysql计算得出的结果不同,这是否意味着这些函数存在错误? 答案: 余数正负 余数可以是正数,也可以是负数。数学上计算余数的公式为:余数=被除数-向下取整(被除数/除数)*除数根据该公式,10对-3取余的...