加密mysql文本信息/欧洲语言支持

时间:2015-07-26 11:53:34

标签: mysql encryption utf-8 character-encoding

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

  • mysql table charset:CHARSET = utf8
  • 患者信息字段类型(名称,地址等):varbinary(255)
  • mysql加密:AES_ENCRYPT
  • 密钥传递为:SHA2('我的秘密密码',256)

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

1 个答案:

答案 0 :(得分:1)

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

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

TO_BASE64(AES_ENCRYPT(phrase, keyvalue))

将生成这样的编码字符串,并且

 AES_DECRYPT(FROM_BASE64(coded), keyvalue)

将解码它。

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

Web服务器通常比数据库服务器更容易渗透,因为数据库服务器可能位于防火墙之后。因此,如果网络犯罪分子破坏您的系统,他可能会首先进入您的网络服务器。然后,他可以轻松地获取数据库加密密钥短语。事实上,如果您的志愿者可以按患者姓名搜索您的表格,您将会一直对许多名称进行大量解密。

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