我的公司有一个永恒的指向Web服务器,允许我们的客户完成调查问卷并将结果提交到内部数据库。
每个外部用户的表单都会获得一个唯一的GUID。例如[9C43207A-FD84-499A-82C3-247E7337335F]。出于安全考虑,使用64位Web服务器上的表单GUID使用C#代码生成令牌。
为了让内部用户看到表单,在我们的winforms应用程序中,嵌入了一个Web浏览器,并将以下URL输入到Web浏览器地址栏中... [https://company_domain_name.com/formonline.aspx?token=TOKEN_GENERATED_BY_64_BIT_WEBSERVER]
以下代码生成令牌......
//**************************************************************
// Example Code
//**************************************************************
System.Guid MY_GUID =
new System.Guid("9C43207A-FD84-499A-82C3-247E7337335F");
string txtID = MY_GUID.ToString();
System.Text.StringBuilder str =
new System.Text.StringBuilder();
str.Append(txtID);
//**************************************************************
// Other string values are appended to StringBuilder for
// security reasons
//**************************************************************
string hashResult = txtID.GetHashCode().ToString();
str.Append(hashResult);
string finalResult = EncodeTo64(str.ToString());
//**************************************************************
// Method
//**************************************************************
private string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes =
System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue =
System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
不幸的是,在内部用户32位客户端上生成了Web令牌 机器与Web服务器版本完全不同,并且网页无法打开。
以下实际示例。
[GUID] [9C43207A-FD84-499A-82C3-247E7337335F]
[64位令牌] [QgT7FcAkB4EtZmQ4NC00OTlhLTgyYzMtMjQ3ZTczMzczMzVmI1RydWUjLTMyMDYzMzU4MQ ==]
[32位令牌] [QgT7FcAkB4EtZmQ4NC00OTlhLTgyYzMtMjQ3ZTczMzczMzVmI0ZhbHNlIzEyNjcyNjM0NTI =]
将Web服务器从64位降级到32位不是一种选择。
更改Web服务器上的代码也不是一种选择,因为它是专有的 软件系统和我很幸运,开发人员给了我他们用来创建令牌的代码。
甚至可以使用计算得到相同的64位结果 在32位客户端?