如何在url / query字符串中使用RNGCryptoServiceProvider生成的字符串

时间:2016-10-04 12:57:21

标签: cryptography url-encoding rngcryptoserviceprovider

注意:我已经解决了这篇文章中提到的问题。 经过很多谷歌我找不到合适的解决方案。就像现在我知道答案。我认为这篇文章将节省其他开发人员试图解决的问题。

问题

我想生成加密随机字符串并将其作为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编码令牌的新方法。

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

1 个答案:

答案 0 :(得分:0)

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