博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RSA加密解密 错误:Base-64 字符数组的无效长度
阅读量:4673 次
发布时间:2019-06-09

本文共 1005 字,大约阅读时间需要 3 分钟。

RSA加密解密 错误:Base-64 字符数组的无效长度

 文章1.
程序中实现了这样一个功能,将一个对象序列化后,作为参数传递给另一个页面,这个页面得到参数并反序列化后还原此对象,但是在运行时有时正常,有时出现“base-64 字符数组的无效长度”的错误提示。

    在网上查找资料,都是说在使用Convert.ToBase64String()方法对字符串进行Base64编码时,需要使参数的长度等于4或4的偶数倍数,否则将抛出“FormatException”异常。但是我这里使用的参数是使用Convert.ToBase64String()方法生成的,理论上是没有问题的。于是对比用Convert.ToBase64String()生成的字符串A与反序列化前Convert.ToBase64String()所使用的参数字符串B,发现A与B之间有差异,A中的加号变成了空格。这是由于网页传递参数时,会将加号编码成空格,但是在解码时却不会解码空格,结果就造成了字符串B不正确,无法背编码。

    确认了问题就好办了,在得到序列化字符串后,使用String.Replace("+", "%2B")先将空格编码,然后再作为参数传给另一页面传递,这样页面在提取参数时才会将“%2B”解码为加号,参数没有差别,在执行反序列化成功就通过了。

具体实现是这样的:

这是链接中出错的参数:

                string comaddress;

                comaddress = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(this.Text5.Value.Trim()));
后面 加上这句话就可以了:

               comaddress = comaddress.Replace("+","%2B");

希望对别人也有帮助!

文章2. 

 最近的一个项目,在传递参数时,在Win2003上正常,在Win7下抛出“base-64 字符数组的无效长度”这样的错误

对比了一下经过Convert.ToBase64String()转换过的参数发现,+都变成了空格

于是在传递参数前,使用Replace("+", "%2B"),目标页使用Replace("%2B", "+"),这样一替换,问题就解决了

转载于:https://www.cnblogs.com/chinaboyzzy/p/4259071.html

你可能感兴趣的文章
oracle 11g r2安装
查看>>
关于自关联1
查看>>
存储控制器、MMU、flash控制器介绍
查看>>
hdu-1814(2-sat)
查看>>
自我反省
查看>>
反射,得到Type引用的三种方式
查看>>
pl sql练习(2)
查看>>
Problem B: 判断回文字符串
查看>>
谷歌浏览器,添加默认搜索引擎的搜索地址
查看>>
数据结构化与保存
查看>>
C# .net 获取程序运行的路径的几种方法
查看>>
为什么需要Docker?
查看>>
国内5家云服务厂商 HTTPS 安全性测试横向对比
查看>>
how to control project
查看>>
转 python新手容易犯的6个错误
查看>>
第四节 -- 列表
查看>>
Python入门学习笔记4:他人的博客及他人的学习思路
查看>>
webstorm里直接调用命令行
查看>>
关联规则算法之FP growth算法
查看>>
对数组序列进行洗牌
查看>>