AES加密密码,UTF-8

时间:2014-04-09 17:59:59

标签: c++ utf-8 openssl aes

我的应用程序收到UTF-16字符串作为密码,应该使用UTF-8编码在数据库中加密后保存。我正在采取以下行动

  1. 以wstring(UTF-16)
  2. 输入密码
  3. 使用reinterpret_cast将此密码重新解释为unsigned char *。
  4. 使用第2步密码并使用AES_cbc_encrypt加密,返回unsigned char *
  5. 将第3步输出转换为wstring(UTF-16)
  6. 使用Poco的UnicodeConvertor类将wstring转换为UTF-8。将此UTF-8字符串保存在数据库中
  7. 这是保存AES加密密码的正确方法吗?请建议是否有更好的方式

2 个答案:

答案 0 :(得分:0)

我认为您将编写的密码转换为十六进制数字或base-64编码要好得多。这样您就可以保证没有奇怪或非法的UTF-16符号,也不会在UTF-8中使用\ n,\ r或\ t。转换后的文字会稍微大一点 - 希望它不是什么大不了的事。

答案 1 :(得分:0)

根据您的要求,您可能需要考虑首先将字符串编码为UTF-8,然后对其进行加密。 这种方法的优点在于,存储在DB中的散列基于独立于字节顺序的二进制格式。 使用UTF-16时,当您在不同系统上使用不同编程语言实现客户端时,通常需要处理字节序。