我试图在我们的系统中实现一个要求,即在进入数据库之前修剪所有的字符串。我们的系统中有一层可以在一个地方处理这个问题,但是我担心如果我这样做,我可能会破坏加密的字符串。使用RijndaelManaged加密可以在输出中生成空格吗?
我知道加密会产生一些非字母数字字符,但是这些限制为非空白字符吗?
我试图在我们的系统中实现一个要求,即在进入数据库之前修剪所有的字符串。我们的系统中有一层可以在一个地方处理这个问题,但是我担心如果我这样做,我可能会破坏加密的字符串。使用RijndaelManaged加密可以在输出中生成空格吗?
我知道加密会产生一些非字母数字字符,但是这些限制为非空白字符吗?
大多数加密算法 - 包括Rijndael - 在二进制上工作,而不是文本。二进制数据中没有空间(或非字母数字字符)的概念。
如果您要必须将加密数据存储为文本,您需要先将二进制数据(例如字节数组)转换为文本。一个简单的方法是使用Base64(例如Convert.ToBase64String(data)
) - 而Base64从不包含使用标准codabet的空格。
所以总结
Encoding.UTF8
的东西,因为加密的数据是而不是 UTF-8编码的文本。Rinjdael,更一般地说,每个加密算法都可能在其输出中产生空格。如果确实需要,您可能希望以防止空格的方式对此二进制数据进行编码。但是,如果可能的话,我建议你只保存数据。许多RDBMS提供二进制存储支持:例如,SQL Server支持varbinary数据类型。
谢谢!我应该更清楚 - 我实际上学过密码学。您的声明“Base64不包含空格”虽然使所有的点击再次点击。是的,我们实际上是通过Base64对输出进行编码,因此我不会有问题。 –