0
注意:我已经解决了这篇文章中提到的问题。 经过很多谷歌我找不到合适的解决方案。现在我知道答案。我认为这篇文章会节省其他开发人员的时间来解决这个问题。如何在url/query字符串中使用RNGCryptoServiceProvider生成的字符串
问题:
我想生成加密的随机字符串,并发送为用户URL的一部分。随着Base64编码字符串,你可能会得到错误:
The request filtering module is configured to deny a request that contains a double escape sequence
,否则将无法找到你的路线。
因此,无论你是破解/解决方法,并找到/替换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;
}
}
使用Base64版本,然后使其URL安全如下所示:http://stackoverflow.com/questions/26353710/how-to-achieve-base64-url-safe-encoding-in-c –