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 –