我几天前读过一篇很好的指南,关于在服务器端生成一个令牌,以便在令牌中创建令牌的时间,以及“Guid.NewGuid()”的加密。
但是,我尝试调整结果以在令牌中拥有用户的用户名,而不是日期时间。我很接近,但是我无法提取用户名,我只能用它后面的一些随机字母来接收它。
在识别时生成令牌的ASP.NET通用处理程序的代码
ASCIIEncoding encoder = new ASCIIEncoding();
if(postType == "identify")
{
byte[] binName = encoder.GetBytes(name);
byte[] key = Guid.NewGuid().ToByteArray();
string _token = Convert.ToBase64String(binName.Concat(key).ToArray());
// The above creates a token with the name and the "key", works well
}
解密令牌的通用处理程序代码(参见结果示例)
if(postType == "check")
{
string _token = dict["token"] as string;
byte[] data = Convert.FromBase64String(_token);
string theCode = encoder.GetString(data); // This will get both the username and the GUID key within
context.Response.Write(jss.Serialize(new Code { eCode = theCode })); // Returns in JSON, irrelevant to the question, it works well
}
示例:如果名称为“user”,则变量“theCode”将保留“userXyZxYzXyZ”的值(而XyZ代表GUID的“随机”键)。
我认为可以公平地说我的问题是如何在解密时将此GUID的密钥与用户名分开
答案 0 :(得分:2)
guid长度为38个字符,因此名称为theCode.SubString(0, theCode.Length - 38)
。或者,您可以将当前用户的名称与代码theCode.StartsWith(name)
进行比较。