【问题标题】:Can encryption using RijndaelManaged produce spaces in the output?使用 RijndaelManaged 加密可以在输出中产生空格吗?
【发布时间】:2011-09-01 19:09:25
【问题描述】:

我正在尝试在我们的系统中实现一个要求,即在进入数据库之前修剪所有字符串。在我们的系统中有一个层,我可以在一个地方处理这个问题,但我担心如果我这样做可能会破坏加密的字符串。

我知道加密会产生一些非字母数字字符,但这些字符是否仅限于非空格?

【问题讨论】:

    标签: .net encryption


    【解决方案1】:

    大多数加密算法(包括 Rijndael)都适用于二进制数据,而不是文本。二进制数据中没有空格(或非字母数字字符)的概念。

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

    总结一下

    • 如果可能,以二进制形式存储加密数据(例如,在 IMAGE 字段中)
    • 如果您必须将其存储在文本字段中,请以适当的方式对其进行转换,例如使用 Base64。 不要使用Encoding.UTF8之类的东西,因为加密的数据是不是 UTF-8 编码的文本。
    • Base64 不包含空格,因此这方面对您来说应该不是问题。

    【讨论】:

    • 谢谢!我应该知道得更多——我实际上是研究密码学的。您的声明“Base64 不包含空格”使它再次单击。是的,我们实际上对输出进行了 Base64 编码,因此我不会有问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2011-05-20
      • 2019-04-08
      • 2014-05-10
      • 2023-03-05
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多