0

我正在尝试实现一个加密助手类,该类使用内置的 GenerateKey 方法生成随机密钥并将其作为字符串返回。我正在使用的对象是;

  • DESCryptoServiceProvider

  • RC2CryptoServiceProvider

  • Rijndael管理

在为所选对象调用 GenenrateKey 方法后,我尝试将键转换为要返回的字符串。

我的问题是我在这个和其他各种网站上看到的所有功能都没有按照我想要的方式工作。例如,如果我为 DES 加密对象运行以下示例;

public String GenerateRandomKey()
{
  DESCryptoServiceProvider encryptObject = new DESCryptoServiceProvider();
  encryptObject.Padding = PaddingMode.Zeros;
  encryptObject.GenerateKey();

  string key = 
      Convert.ToBase64String(encryptObject.Key,0,encryptObject.Key.Length); 
  return key;
}

返回的密钥字符串的一个示例是 A01190NXvPI=,它是 12 个字符,但我期望 DES 是 8 个字符的字符串。其他加密方法类似地返回太长的密钥字符串。

我确信这只是一个编码问题,但我已经尝试了所有这些,但仍然没有运气。我还尝试添加逻辑来去除键字节数组中可能存在的任何填充或返回字符,但同样没有运气。

4

1 回答 1

0

一个(单个)DES 密钥是 56 位的,因此它可以存储在 7 个字节中。有几种常见的方法可以将任意二进制数据表示为字符串,例如十六进制编码和 base64 编码。任何常见的编码方法都会创建一个字符串,其中的字符比原始数据中的字节多,因为每个字符携带的信息少于 8 位。如果这是不可取的,请重新考虑通过将字节数组转换为字符串来完成的工作。

于 2013-11-05T17:14:54.740 回答