C# AES base64加密和JAVA BASE64 加密不同

sxcmxyjy 2020-08-20 12:53:08



.net 解析后数值是24位,并提示IV 错误 按照AES规则IV向量是16位,Java 是16位
...全文
7201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶知秋~ 2020-10-10
  • 打赏
  • 举报
回复
语法是有比较大的差异的
sxcmxyjy 2020-08-20
  • 打赏
  • 举报
回复
key值在java图片上是content,用来.net 和Java小哥加密结果不同的
sxcmxyjy 2020-08-20
  • 打赏
  • 举报
回复
问题找到了,服务器直接对key 进行解码操作,.net 必须先转成Base64,在进行解码,不然解码错误。导致IV向量byte数组变成24,导致异常或者加密失败。 对于这个问题有好的解决方式不:
  • 打赏
  • 举报
回复

 public static string Decode(string cipherText)
        {
            var toEncryptArray = Convert.FromBase64String(cipherText);
            var rm = new System.Security.Cryptography.RijndaelManaged()
            {
                Key = Convert.FromBase64String("GFqjnlbHe46v40/jEZO88Q=="),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.None
            };
            var cTransform = rm.CreateDecryptor();
            var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            resultArray = FixBytes_Decode(resultArray);
            return Encoding.UTF8.GetString(resultArray);
        }
  private static byte[] FixBytes_Decode(byte[] d_Bytes)
        {
            var temp = d_Bytes.ToList();
            int remove_Count = temp.LastOrDefault();
            temp = temp.Take(temp.Count - remove_Count).ToList();
            return temp.ToArray();
        }
参考下吧
  • 打赏
  • 举报
回复
Encoding.Default,是指当前系统设置的“默认字符集编码方式”换成Encoding.UTF8再试试

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧