QT读写JSON文件保存Mysql连接字符串密码并加密解密字符串密码

注意:解密需要重复运行加密代码两次即可解密。

Json文件写入时,不可以用资源文件里的文件,因为QT不容许写入资源文件,但是可以读取。

 

 

void HelpDeskClientDialog::on_pushButton_Settings_Save_clicked()
{
    QString filepath =  QCoreApplication::applicationDirPath();
    QFile settingFile2(filepath + "/setting/setting.json");
    QFileInfo info(settingFile2);
    if(settingFile2.open(QIODevice::WriteOnly|QIODevice::Text))
    {
        QJsonObject jsonObject;//构建json对象json
        QString encyPassword = EncryptionStr (ui->lineEdit_Password->text ()); 
        jsonObject.insert("dataBaseHostName", ui->lineEdit_IP->text ());
        jsonObject.insert("dataBasePort", ui->lineEdit_Port->text ());
        jsonObject.insert("dataBaseUserName", ui->lineEdit_LoginName->text ());//ui->lineEdit_LoginName->text ());
        jsonObject.insert ("dataBasePassWord", encyPassword); //写入json数据到本地文件,
        QJsonDocument document;
        document.setObject(jsonObject);
        QString jsonStr(document.toJson(QJsonDocument::Indented));
        settingFile2.write(jsonStr.toUtf8 ());
        settingFile2.flush();
        QMessageBox::information (this, "Success", "Your configuration were saved successful!");
    }
    else
    {
        QMessageBox::warning (this, "Error", "Sorry, your configuration were saved failure, pls double check!");
    }
    settingFile2.close();
}



void HelpDeskClientDialog::loadSetting()
{
    QFile settingFile;
    settingFile.setFileName(":/setting/setting.json");
    if(settingFile.open(QFile::ReadOnly))
    {
        // 读取json文件的内容,当前读取的内容可能是错误的,因为json文件不能有注释,而我在json中添加了注释,所以需要把注释内容去掉
        QByteArray setting = settingFile.readAll().trimmed();
        // 循环删除掉注释内容
        while (setting.contains("/*") && setting.contains("*/"))
        {
            int start = setting.indexOf("/*"); // 注释左索引(这里会返回左斜杠所在索引值)
            int end = setting.indexOf("*/") + 1; // 注释右索引(这里会返回*所在索引值,所以我们需要+1,将索引值切换到左斜杠位置)
            setting =  setting.remove(start, (end - start) + 1); // 移除 /* xxxx */ 这一块的注释内容,(结束索引-开始索引+1)是整个注释内容的长度
        }
        QJsonParseError jsonError;
        QJsonDocument jsonDoc(QJsonDocument::fromJson(setting, &jsonError));
        if(jsonError.error == QJsonParseError::NoError)
        {
            QJsonObject rootObj = jsonDoc.object();
            dataBaseHostName = rootObj.value("dataBaseHostName").toString (); // 读取配置文件中数据库连接ip地址
            dataBasePort = rootObj.value("dataBasePort").toInt();  // 读取配置文件中数据库连接端口
            dataBaseUserName = rootObj.value("dataBaseUserName").toString(); // 读取配置文件中数据库连接用户名
            dataBasePassWord = EncryptionStr(rootObj.value("dataBasePassWord").toString()); // 读取配置文件中数据库连接密码
            dataBasePassWord = EncryptionStr(dataBasePassWord); // 读取配置文件中数据库连接密码 /运行两次解密后还原密码
        }
        else
        {
            qDebug() << "Configure json file error!" << jsonError.errorString();
        }
        settingFile.close ();
    }
}


QString HelpDeskClientDialog::EncryptionStr(QString str) //加密字符串,运行两次即可解密
{
    std::wstring wString = str.toStdWString();
    static QByteArray key = "86868686m$M&NOS";
    for (int i = 0; i < wString.size(); i++)
    {
        wString[i] = wString[i] ^ key[i % key.size()];
    }
    return QString::fromStdWString(wString).toUtf8();
}





 

posted @ 2022-08-05 09:05  商君治国安邦之张莽  阅读(520)  评论(0编辑  收藏  举报