1

注意:我已经解决了这篇文章中提到的问题。在做了很多谷歌之后,我找不到正确的解决方案。现在我知道答案了。我认为这篇文章将节省其他开发人员尝试解决相同问题的时间。

问题

我想生成加密随机字符串并将其作为 url 的一部分发送给用户。使用 Base64 字符串,您可能会收到错误:

请求过滤模块用于拒绝包含双转义序列的请求

否则它将找不到您的路线。

因此,您要么破解/解决方法并在 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 Encoded Token 的新方法。

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;
   }
}
4

1 回答 1

0

在上述问题中还提供了解决方案。

于 2016-10-14T14:45:41.687 回答