【问题标题】:Encryption with an ASCII Encoding (ASP.NET) vs Encryption with a UTF-8 Encoding (Silverlight)使用 ASCII 编码 (ASP.NET) 加密与使用 UTF-8 编码 (Silverlight) 加密
【发布时间】:2013-01-25 00:40:19
【问题描述】:

我目前有一组 AES 加密/解密函数,我在 ASP.NET 中使用它们来满足我的所有加密需求。然后,我将应用程序中的这些数据来回传递给另一个我无法控制的安全应用程序。一切都以字符串的形式发送,字符串以 ASCII 编码与这些应用程序之间来回发送。

现在我正在使用一个预先存在的 Silverlight 应用程序,我需要在其中向数据添加加密/解密功能,但我仍将发送到另一个使用该应用程序的安全应用程序(我无法控制) ASCII 编码。由于 Silverlight 使用 UTF-8,这似乎是个问题。我对编码有足够的了解,知道 ASCII 和 UTF-8 是如何相似和不同的(0 到 127 都是相同的,但 UTF-8 有更多的字符)。如果我要向/从使用 ASCII 的应用程序发送/接收数据,那么在我的端使用 UTF-8 加密/解密是否有任何风险? (我的应用在加密前不会使用任何非标准字符)

另外,我应该:

  1. 在 Silverlight 中使用具有我的 ASCII 加密/解密功能的服务参考?或
  2. 在 Silverlight 应用程序中以 UTF-8 加密/解密,不需要服务引用?

【问题讨论】:

  • 你为什么使用 ASCII 而不是 UTF-8?
  • 我所说的第三方(上面)使用这种编码,因为它们非常不灵活且难以处理,而且它在 .NET 中很容易获得,所以我们也是。

标签: asp.net silverlight encryption utf-8 ascii


【解决方案1】:

虽然从 i18n 的角度来看这很糟糕,但如果可以合理地确定您的输入只会在正常的 ascii 字符范围内,那么您应该没有问题。

您可以添加来自this SO answer 的代码,为您提供一些额外的保护——将非 ASCII 安全的 UTF-8 字符转换为“?”,返回一个字节数组,您可以将其输入到您的加密方法中。

【讨论】:

  • 那么我的 UTF-8 加密不可能导致加密字符串中出现非 ASCII 字符?
  • 如果您使用链接中的代码,它将保证传递给您的加密方法的明文是完全ASCII字符。也就是说,它通过将所有非 ASCII 字符转换为 ? 来保证,但如果你没有很多用户试图在你的应用程序中输入奇怪的 unicode 字符,你应该没问题。
  • 对,我明白,但是如果密文中出现非ASCII字符怎么办?就像我有字符串“dog”,并使用 UTF-8 对其进行加密,它最终会不会是“e45gØ”之类的东西?这会导致另一端的解密失败,即使我用“Ø”代替了“?”,对吧?
  • 哦,好吧,您可以通过不直接将密文从字节数组转换为字符串来解决这个问题。使用 base64 之类的东西来编码你的密文
  • 啊,明白了。那是我在思考时遗漏的步骤。谢谢!
猜你喜欢
  • 2011-05-21
  • 2021-03-22
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多