C#Winform应用程序:在32位客户端计算机上解码64位Web令牌

时间:2014-06-18 11:47:31

标签: c# asp.net .net winforms 32bit-64bit

我的公司有一个永恒的指向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位客户端?

0 个答案:

没有答案