使用按位异或^进行加、解密:
加、解密都是使用该函数:
void EncryptionStr(QByteArray &data)
{
static QByteArray key = "MY_KEY";
for (int i = 0; i < data.size(); i++)
{
data[i] = data[i] ^ key[i % key.size()];
}
}
发现该加密函数无法对中文进行加密,原因是含有中文每个字符在不同编码格式所占字节数不同。所以将该字符串转为宽字节(每个字符占两个字节),处理后在转换utf8(我的项目使用utf8字符编码).
QString EncryptionStr(QString str)
{
std::wstring wString = str.toStdWString();
static QByteArray key = "MY_KEY";
for (int i = 0; i < wString.size(); i++)
{
wString[i] = wString[i] ^ key[i % key.size()];
}
return QString::fromStdWString(wString).toUtf8();
}
备注:此处加密key中的字符在加密相同的字符时会产生异常,比如用key="MY_KEY" 来加密MY_KEY加密过后的密文是为空的,因为在异或操作的时候,相同的值结果为0,所以加密过后密文是“\0”为字符串的结束符,导致加密异常。
解决方法:就是将key中字符串的值设置为明文中没有的字符,比如¥~等特殊字符。