【问题标题】:Encrypting mysql text information / European language support加密mysql文本信息/欧洲语言支持
【发布时间】:2015-07-26 11:53:34
【问题描述】:

我正在为临终关怀患者和志愿者开发一个开源项目。我想支持所有欧洲语言,而且患者信息必须加密。我目前正在使用以下内容:

  • mysql 表字符集:CHARSET=utf8
  • 患者信息字段类型(姓名、地址等):varbinary(255)
  • mysql 加密:AES_ENCRYPT
  • 密钥传递为:SHA2('My secret passphrase', 256)

这些设置是否支持所有欧洲语言?加密方案看起来合理吗?

【问题讨论】:

  • 我原来用的是charset=latin1,field type=varchar(255)。 Latin1 不支持所有欧洲语言,并且 varchar 不能正确支持加密字符串。我想我在问 - 我错过了什么吗?这些设置是否支持所有欧洲语言?加密方案看起来合理吗?
  • 字节可以代表任何东西,因此它们可以代表所有欧洲语言字符集。他们是否这样做可能是您如何将数据放入数据库以及如何检索它的问题。

标签: mysql encryption utf-8 character-encoding


【解决方案1】:

是的,MySQL 的 AES_ENCRYPT() 函数将对 utf-8 编码的文本字符串进行往返加密。所以这应该适用于您的跨语言应用程序。

AES 的输出是一个二进制文本字符串。如果您要从客户端到服务器等来回传递这些数据,我强烈建议您将其编码为 Base-64 文本字符串,以便它可以用对传输和存储友好的 ASCII 表示。

TO_BASE64(AES_ENCRYPT(phrase, keyvalue))

会生成这样一个编码字符串,而

 AES_DECRYPT(FROM_BASE64(coded), keyvalue)

会解码。

您问这是否是一种合理的加密方法。如果您正在构建一个 Web 应用程序,我认为它不足以保护受保护的患者数据。为什么不?因为您的 Web 应用程序必须知道关键字才能使其正常工作。因为 AES 是对称加密,所以加密和解密必须使用相同的关键字。这意味着它将在您的网络服务器上浮动。

Web 服务器通常比数据库服务器更容易被渗透,因为数据库服务器可能位于防火墙后面。因此,如果网络犯罪分子破解了您的系统,他可能会首先进入您的网络服务器。然后,他可以轻松掌握数据库加密关键字。事实上,如果您的志愿者可以通过患者姓名搜索您的表格,那么您将一直对许多姓名进行大量解密。

因此,如果您愿意,可以继续使用您提出的方案作为深度安全性的一部分。但请记住,这是不够的。不要指望它。您仍然需要安全的 Web 服务器、强大的用户身份验证方案和适当的防火墙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多