当前位置: 代码迷 >> QT开发 >> Qt本地加密(openssl rsa)unsigned char* to QString,该如何解决
  详细解决方案

Qt本地加密(openssl rsa)unsigned char* to QString,该如何解决

热度:766   发布时间:2016-04-25 04:58:37.0
Qt本地加密(openssl rsa)unsigned char* to QString
我用Qt做了个客户端需要进行本地的加解密(利用xml),但是xml读写需要用QString类型,但是openssl库的输入输出都是unsigned char * 。但是Qt没有相应的类进行转换,大神们,有没有什么解决办法!!!!!

------解决方案--------------------
QByteArray过渡一下就可以了。
------解决方案--------------------
QString里面存放的是UTF8格式的字符串,而加密后得到的数据是毫无规律的二进制串

如果加密后的二进制串一定要存放在XML中,我建议你先用QByteArray将其转换为Base64格式,然后再用QString::fromAscii转化为字符串
至于解密后的结果,就看你的编码(ASCII,UTF8,etc)是啥了,然后用相应的QString::fromXXX函数将其转化为字符串
------解决方案--------------------
C/C++ code
QString qstrContent;unsigned char* uszContent = (unsigned char *)qstrContent.toUtf8().data();qstrContent = QString::fromUtf8(QByteArray((char*)uszContent));
------解决方案--------------------
探讨

利用QByteArray必须是char *类型,但是unsigned char *转换为char *时会出现损失,尤其是加密后得到的密文。

------解决方案--------------------
正解,所以楼主应该是在存取时没有注意格式的转换。

探讨

引用:

利用QByteArray必须是char *类型,但是unsigned char *转换为char *时会出现损失,尤其是加密后得到的密文。

char*是不是unsigned的区别在于你是如何解释最高位的,而内容本身并不会出现任何变化
你做比如(char *)的强制类型转换只是告诉编译器用不同的方式去解析最高位而已
  相关解决方案