一个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"]);   结果还是编码有问题   麻烦问问大家我这个该怎么处理

解决方案 »

  1.   

    可以采用转成base64然后用post的方式请求
    或者干脆把1个字节转成2个字节的16进制字符串
    服务端再转回来
      

  2.   

    朋友,你这个加密是多余的 DES  要跟秘钥,     加密和 解密的 秘钥是一样的。    人家一反编辑你客户端。   你的秘钥就出来了。你就别加密了, 直接传账号密码,   登陆成功后,  服务端返回个token    以后  客户端的访问权限都用token来决定,    然后把这个人的 ID和token存在服务器的缓存里 或者字典里。
    最后就是 登陆多久重新生成token   和   重新登陆生成token。你使用的是ajax传的吗?  如果是  使用winfrom后台post的二进制,  你得把接收到的转回  来。 然后在取。  直接   ontext.Request.Form是取不到的吧。 
      

  3.   


    只是把加密的密文传输到服务器 服务器正常解密就是正确的   客户端是不会存在秘钥的  我们发给客户登录的也是密文  送去服务器解密的没有秘钥  客户端如何加密那?     除非有公钥和私钥  但是 你用的是DES  加密     加密和解密 的8位字符必须一样才行    。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。
      

  4.   


    只是把加密的密文传输到服务器 服务器正常解密就是正确的   客户端是不会存在秘钥的  我们发给客户登录的也是密文  送去服务器解密的没有秘钥  客户端如何加密那?     除非有公钥和私钥  但是 你用的是DES  加密     加密和解密 的8位字符必须一样才行    。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。
    就是说 客户端产生一个机器码   机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的  然后返回重要数据
    也可以我们发一个账号给客户 客户拿账号去登录  客户端发送机器码和账号去服务器 如果账号存在  则服务器直接加密机器码发回客户端
      

  5.   


    只是把加密的密文传输到服务器 服务器正常解密就是正确的   客户端是不会存在秘钥的  我们发给客户登录的也是密文  送去服务器解密的没有秘钥  客户端如何加密那?     除非有公钥和私钥  但是 你用的是DES  加密     加密和解密 的8位字符必须一样才行    。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。
    就是说 客户端产生一个机器码   机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的  然后返回重要数据
    也可以我们发一个账号给客户 客户拿账号去登录  客户端发送机器码和账号去服务器 如果账号存在  则服务器直接加密机器码发回客户端
    客户端产生一个机器码    产生这个客户端加密的地方 是安装客户电脑的 exe文件吗? 如果是 就是没用的,除非, 客户申请,  然后服务端加密返回给客户,  客户用服务端返回的 在去 服务端登陆 解密。 因为加密解密都在服务端没办法看到。
      

  6.   


    只是把加密的密文传输到服务器 服务器正常解密就是正确的   客户端是不会存在秘钥的  我们发给客户登录的也是密文  送去服务器解密的没有秘钥  客户端如何加密那?     除非有公钥和私钥  但是 你用的是DES  加密     加密和解密 的8位字符必须一样才行    。 有代码看看吗? 我看下你客户端如何加密 的。 学习下。
    就是说 客户端产生一个机器码   机器码发给我们经由加密后发给客户 客户登录则把密文发往服务器能正常解密就是对的  然后返回重要数据
    也可以我们发一个账号给客户 客户拿账号去登录  客户端发送机器码和账号去服务器 如果账号存在  则服务器直接加密机器码发回客户端
    客户端产生一个机器码    产生这个客户端加密的地方 是安装客户电脑的 exe文件吗? 如果是 就是没用的,除非, 客户申请,  然后服务端加密返回给客户,  客户用服务端返回的 在去 服务端登陆 解密。 因为加密解密都在服务端没办法看到。
    是的客户端产生机器码 但是加密机器码不是在客户端完成的  服务器用秘钥加密机器码形成密文 发送给客户端  客户端再回发服务器 在解密而已     现在问题是遇到服务器接收密文的时候 产生的编码问题   现在也解决了   不是很完美 用的Replace。