0

创建加密字符串时:

 using(var cryptoProvider = new DESCryptoServiceProvider())
    {
      cryptoProvider.Key = Convert.FromBase64String(Key);
      cryptoProvider.IV = Convert.FromBase64String(Key);

      var encryptedString = cryptoProvider
        .CreateEncryptor()
        .TransformFinalBlock(serializedBytes, 0, serializedBytes.Length);

      return Convert.ToBase64String(encryptedString);

有没有办法阻止它使用某些字符?实际引起问题的字符是“+”号。当 asp.net 解码并且(例如)+ 号变成空格时,问题就很明显了。

可能还有其他字符会落入同一问题,但 + 号似乎是我遇到的唯一一个问题。有没有办法让加密不使用某个字符,或者在我的加密逻辑中防止这种情况发生?

4

3 回答 3

1

不,但您可以只调用Url.Encode()生成的字符串。

于 2012-09-17T15:12:04.503 回答
1

这与加密和 DES 完全无关。

Base64 负责生成这些字符。由于只有 62 个字母数字 ASCII 字符,因此需要另外两个字符才能获得完整的 64 个字符。按照惯例,这两个字符是+/,用于填充它使用=.

现在,您可以根据需要替换一些其他字符+,或者您可以在输出中使用 url 编码。/string.Replace

于 2012-09-17T15:12:43.567 回答
0

因此,在我在 url 中使用加密值的特殊情况下,为了避免提到的 url 编码/解码管理噩梦,使用

HttpUtilityServer.UrlTokenEncode / UrlTokenDecode

处理 To64BaseString() 使用的填充 Ascii 值带来的所有问题。

于 2012-09-17T17:47:07.133 回答