如何在 url/query 字符串中使用 RNGCryptoServiceProvider 生成的字符串
How to use RNGCryptoServiceProvider generated string in url/query string
注意: 我已经解决了post中提到的问题。
在做了很多 google 之后,我找不到正确的解决方案。现在我知道答案了。我认为这 post 会节省其他开发人员尝试解决相同问题的时间。
问题:
我想生成加密随机字符串并将其作为 url 的一部分发送给用户。使用 Base64 字符串,您可能会得到 Error:
The request filtering module is configured to deny a request that
contains a double escape sequence
否则它将找不到您的路线。
所以要么 hack/workaround 和 find/replace 对 Base64 字符串转义字符,要么使用此解决方案。
这是我的原始代码的样子。
public string GenerateRandomString()
{
var randomBytes = GenerateRandomBytes(512);
var randomString = Convert.ToBase64String(randomBytes);
return randomString;
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}
解决方案是UrlTokenEncode。添加了将随机字节转换为 Url 编码令牌的新方法。
public string GenerateRandomStringToken()
{
var randomBytes = GenerateRandomBytes(512);
return HttpServerUtility.UrlTokenEncode(randomBytes);
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}
上面的问题也提供了解决方案
注意: 我已经解决了post中提到的问题。 在做了很多 google 之后,我找不到正确的解决方案。现在我知道答案了。我认为这 post 会节省其他开发人员尝试解决相同问题的时间。
问题:
我想生成加密随机字符串并将其作为 url 的一部分发送给用户。使用 Base64 字符串,您可能会得到 Error:
The request filtering module is configured to deny a request that contains a double escape sequence
否则它将找不到您的路线。
所以要么 hack/workaround 和 find/replace 对 Base64 字符串转义字符,要么使用此解决方案。
这是我的原始代码的样子。
public string GenerateRandomString()
{
var randomBytes = GenerateRandomBytes(512);
var randomString = Convert.ToBase64String(randomBytes);
return randomString;
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}
解决方案是UrlTokenEncode。添加了将随机字节转换为 Url 编码令牌的新方法。
public string GenerateRandomStringToken()
{
var randomBytes = GenerateRandomBytes(512);
return HttpServerUtility.UrlTokenEncode(randomBytes);
}
private byte[] GenerateRandomBytes(int keyBitLength)
{
using (var provider = new RNGCryptoServiceProvider())
{
var lengthInByte = keyBitLength / 8;
var randomNumber = new byte[lengthInByte];
provider.GetBytes(randomNumber);
return randomNumber;
}
}
上面的问题也提供了解决方案