DESCryptoServiceProvider .net并限制加密的字符集

时间:2009-02-15 19:00:20

标签: .net encryption

所以我正在使用.net DESCryptoServiceProvider

加密字符串

是否可以限制加密字符串的字符集,使其不包含特定的字符范围?

例如/或\?

2 个答案:

答案 0 :(得分:2)

您想要从明文字符串转换为加密字符串吗?如果是这样,请使用支持全范围Unicode的编码从明文转换为二进制数据,使用base64将加密二进制文件转换为“安全”加密文本。

所以管道的步骤是:

<强>加密

  • 将明文(字符串)转换为明文(字节) - 例如

    byte[] plainBinary = Encoding.UTF8.GetBytes(plainText);
    
  • 使用DESCryptoServiceProviderplainBinaryencryptedBinary)正常加密

  • 将加密的二进制文件转换为加密文本:

    string encryptedText = Convert.ToBase64String(encryptedBinary);
    

<强>解密:

  • 将加密文本转换为加密二进制文件:

    byte[] encryptedBinary = Convert.FromBase64String(encryptedText);
    
  • 以正常方式解密(encryptedBinaryplainBinary

  • 将纯二进制转换为纯文本:

    string plainText = Encoding.UTF8.GetString(plainBinary);
    

或者,您可以使用StreamWriter(用于文本到二进制转换)管道数据,CryptoStream(用于DES加密)和ToBase64Transform只留下转换(最后使用加密和base64编码数据的Encoding.ASCII。然后,您可以使用FromBase64Transform来反转该过程。

如果base64对创建的字符没有足够的限制,你总是可以编写自己的类似base64的转换 - 任何采用任意字节并生成可以使用允许的字符解码回那些字节的文本的内容,应该没事。

答案 1 :(得分:1)

不,但您可以使用base64编码对其进行编码。所以它不包含任何非文本字符。

byte[] encryptedStream = ..
string encryptedString = Convert.ToBase64String(encryptedStream );