2011-09-01 62 views
0

我试图在我们的系统中实现一个要求,即在进入数据库之前修剪所有的字符串。我们的系统中有一层可以在一个地方处理这个问题,但是我担心如果我这样做,我可能会破坏加密的字符串。使用RijndaelManaged加密可以在输出中生成空格吗?

我知道加密会产生一些非字母数字字符,但是这些限制为非空白字符吗?

回答

4

大多数加密算法 - 包括Rijndael - 在二进制上工作,而不是文本。二进制数据中没有空间(或非字母数字字符)的概念。

如果您要必须将加密数据存储为文本,您需要先将二进制数据(例如字节数组)转换为文本。一个简单的方法是使用Base64(例如Convert.ToBase64String(data)) - 而Base64从不包含使用标准codabet的空格。

所以总结

  • 如果可能的话,存储加密的二进制形式的数据(例如在图像领域)
  • 如果将其存储在一个文本字段,它转换成合适的方式,例如使用Base64。 不要使用类似Encoding.UTF8的东西,因为加密的数据是而不是 UTF-8编码的文本。
  • Base64不包含空格,所以这方面不应该是你的问题。
+0

谢谢!我应该更清楚 - 我实际上学过密码学。您的声明“Base64不包含空格”虽然使所有的点击再次点击。是的,我们实际上是通过Base64对输出进行编码,因此我不会有问题。 –

1

Rinjdael,更一般地说,每个加密算法都可能在其输出中产生空格。如果确实需要,您可能希望以防止空格的方式对此二进制数据进行编码。但是,如果可能的话,我建议你只保存数据。许多RDBMS提供二进制存储支持:例如,SQL Server支持varbinary数据类型。

相关问题