winfrom 登录 向后台Login.ashx POST数据的时候 遇到的编码问题

小菜来袭 2019-05-25 08:47:18
一个winform的登录界面 输入用户和密码后向后台ashx发送数据 用户名和密码是通过DES加密的 所以会有 + = / 这些特殊符号
但是 后台接收
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string user= context.Request.Form["user"];
string pwd= context.Request.Form["pwd"];
context.Response.Write(pwd);
}
输出的pwd 其中特殊符号 = 变成 %3D +号变成空格了 /变成%2f 导致后台解密失败

我在登录端使用了 string pdata=string.format("user={0}&pwd={1}","加密后的用户名","加密后的密码");
string url= "http://192.168.1.101:8089/Handle/Login.ashx"
HttpUtility.UrlEncode(pdata);
后台ashx使用了 HttpUtility.UrlDecode( context.Request.Form["user"]); 结果还是编码有问题 麻烦问问大家我这个该怎么处理
...全文
239 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 小菜来袭 的回复:
[quote=引用 2 楼 好奇都是要学的 的回复:] 朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
只是把加密的密文传输到服务器 服务器正常解密就是正确的 客户端是不会存在秘钥的 我们发给客户登录的也是密文 送去服务器解密的[/quote] 没有秘钥 客户端如何加密那? 除非有公钥和私钥 但是 你用的是DES 加密 加密和解密 的8位字符必须一样才行 。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。
小菜来袭 2019-05-28
  • 打赏
  • 举报
回复
引用 6 楼 好奇都是要学的 的回复:
[quote=引用 5 楼 小菜来袭 的回复:] [quote=引用 4 楼 好奇都是要学的 的回复:] [quote=引用 3 楼 小菜来袭 的回复:] [quote=引用 2 楼 好奇都是要学的 的回复:] 朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
只是把加密的密文传输到服务器 服务器正常解密就是正确的 客户端是不会存在秘钥的 我们发给客户登录的也是密文 送去服务器解密的[/quote] 没有秘钥 客户端如何加密那? 除非有公钥和私钥 但是 你用的是DES 加密 加密和解密 的8位字符必须一样才行 。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。[/quote] 就是说 客户端产生一个机器码 机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的 然后返回重要数据 也可以我们发一个账号给客户 客户拿账号去登录 客户端发送机器码和账号去服务器 如果账号存在 则服务器直接加密机器码发回客户端[/quote] 客户端产生一个机器码 产生这个客户端加密的地方 是安装客户电脑的 exe文件吗? 如果是 就是没用的,除非, 客户申请, 然后服务端加密返回给客户, 客户用服务端返回的 在去 服务端登陆 解密。 因为加密解密都在服务端没办法看到。[/quote] 是的客户端产生机器码 但是加密机器码不是在客户端完成的 服务器用秘钥加密机器码形成密文 发送给客户端 客户端再回发服务器 在解密而已 现在问题是遇到服务器接收密文的时候 产生的编码问题 现在也解决了 不是很完美 用的Replace。
  • 打赏
  • 举报
回复
引用 5 楼 小菜来袭 的回复:
[quote=引用 4 楼 好奇都是要学的 的回复:] [quote=引用 3 楼 小菜来袭 的回复:] [quote=引用 2 楼 好奇都是要学的 的回复:] 朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
只是把加密的密文传输到服务器 服务器正常解密就是正确的 客户端是不会存在秘钥的 我们发给客户登录的也是密文 送去服务器解密的[/quote] 没有秘钥 客户端如何加密那? 除非有公钥和私钥 但是 你用的是DES 加密 加密和解密 的8位字符必须一样才行 。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。[/quote] 就是说 客户端产生一个机器码 机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的 然后返回重要数据 也可以我们发一个账号给客户 客户拿账号去登录 客户端发送机器码和账号去服务器 如果账号存在 则服务器直接加密机器码发回客户端[/quote] 客户端产生一个机器码 产生这个客户端加密的地方 是安装客户电脑的 exe文件吗? 如果是 就是没用的,除非, 客户申请, 然后服务端加密返回给客户, 客户用服务端返回的 在去 服务端登陆 解密。 因为加密解密都在服务端没办法看到。
小菜来袭 2019-05-28
  • 打赏
  • 举报
回复
引用 4 楼 好奇都是要学的 的回复:
[quote=引用 3 楼 小菜来袭 的回复:] [quote=引用 2 楼 好奇都是要学的 的回复:] 朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
只是把加密的密文传输到服务器 服务器正常解密就是正确的 客户端是不会存在秘钥的 我们发给客户登录的也是密文 送去服务器解密的[/quote] 没有秘钥 客户端如何加密那? 除非有公钥和私钥 但是 你用的是DES 加密 加密和解密 的8位字符必须一样才行 。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。[/quote] 就是说 客户端产生一个机器码 机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的 然后返回重要数据 也可以我们发一个账号给客户 客户拿账号去登录 客户端发送机器码和账号去服务器 如果账号存在 则服务器直接加密机器码发回客户端
  • 打赏
  • 举报
回复
朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
小菜来袭 2019-05-27
  • 打赏
  • 举报
回复
引用 2 楼 好奇都是要学的 的回复:
朋友,你这个加密是多余的 DES 要跟秘钥, 加密和 解密的 秘钥是一样的。 人家一反编辑你客户端。 你的秘钥就出来了。你就别加密了, 直接传账号密码, 登陆成功后, 服务端返回个token 以后 客户端的访问权限都用token来决定, 然后把这个人的 ID和token存在服务器的缓存里 或者字典里。 最后就是 登陆多久重新生成token 和 重新登陆生成token。 你使用的是ajax传的吗? 如果是 使用winfrom后台post的二进制, 你得把接收到的转回 来。 然后在取。 直接 ontext.Request.Form是取不到的吧。
只是把加密的密文传输到服务器 服务器正常解密就是正确的 客户端是不会存在秘钥的 我们发给客户登录的也是密文 送去服务器解密的
stherix 2019-05-26
  • 打赏
  • 举报
回复
可以采用转成base64然后用post的方式请求 或者干脆把1个字节转成2个字节的16进制字符串 服务端再转回来

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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