AES加密URL参数丢失'+'符号导致解密失败问题求助
解决URL参数中AES加密字符串的
+被替换为空格的问题 问题原因
Base64加密后的字符串里的+符号,在URL规则中会被解析成空格,导致传递到收据页面的加密数据损坏,无法正常解密。
修复方案
1. 支付页面:对加密结果做URL编码
生成跳转URL前,必须把加密后的字符串转换成URL安全的格式,避免特殊字符被错误解析。修改后的代码如下:
string fn = txtdonorname.Text.Trim(); // 待加密数据 string encryptedUs = Encryption(us); // 执行AES加密 string encodedUs = HttpUtility.UrlEncode(encryptedUs); // 对加密结果进行URL编码 string redirectUrl = string.Format("../4home/creceipt.aspx?us={0}", encodedUs); string script = $"setTimeout(function() {{ window.location.href = '{redirectUrl}'; }}, 4000);"; ClientScript.RegisterStartupScript(this.GetType(), "RedirectScript", script, true);
注:原代码里
string.Format用了{1}但只传了一个参数,这里修正为{0}避免格式错误。
2. 收据页面:直接获取参数即可
Request.QueryString会自动对URL编码的内容解码,还原出原始的加密字符串,无需额外处理:
string us = Request.QueryString["us"]; // 这里直接用us进行AES解密操作即可 lbluname.Text = us; // 此时us会是完整的c9Qj2sFpCM9A+s6YbT4nPg==
额外说明
除了+,Base64中的/、=等字符也属于URL特殊字符,URL编码会统一处理这些字符,确保加密数据完整传递到目标页面。
内容的提问来源于stack exchange,提问作者danny
相关产品推荐
相关产品推荐

