使用cryptopp库的时候遇到一个
问题:
使用AES加密字符串后返回的是一个std::string
根据需求,我需要将这个string转化为
QString,然后解密的时候再把QString转化为string,
但是我发现QString转化的string和原来AES加密返回的string不一样...
贴代码:(使用fromStdString和toStdString)
- std::string miyaosStr = xlcp->encryptopp(QString("1234").toStdString());
- for (int i=0; i < miyaosStr.length(); i++){
- cout << (int)miyaosStr[i]<<" ";
- }
- cout << endl;
- QString testsStr = QString::fromStdString(miyaosStr);
- std::string miyaosStr2 = testsStr.toStdString();
- for (int i=0; i < miyaosStr2.length(); i++){
- cout << (int)miyaosStr2[i] << " ";
- }
结果是:
- 115 -50 115 81 -16 -42 -73 64 30 62 -32 -54 -124 61 -81 9
- 115 -17 -65 -67 115 81 -17 -65 -67 -42 -73 64 30 62 -17 -65 -67 -54 -124 61 -17 -65 -67 9
这样必然导致解密
失败!
但是使用fromLatin1和toLatin1却是正确的:
贴代码:(使用fromLatin1和toLatin1)
- std::string miyaosStr = xlcp->encryptopp(QString("1234").toStdString());
- for (int i=0; i < miyaosStr.length(); i++){
- cout << (int)miyaosStr[i]<<" ";
- }
- cout << endl;
- QString testsStr = QString::fromLatin1(miyaosStr.c_str());
- std::string miyaosStr2 = testsStr.toLatin1().data();
- for (int i=0; i < miyaosStr2.length(); i++){
- cout << (int)miyaosStr2[i] << " ";
- }
的结果就是:
- 115 -50 115 81 -16 -42 -73 64 30 62 -32 -54 -124 61 -81 9
- 115 -50 115 81 -16 -42 -73 64 30 62 -32 -54 -124 61 -81 9
不理解 toStdString和toLatin1.data() 的区别了,有人能帮忙吗?