QT开发中文网

qt对传入数据库的数据进行加密和解密实例

下面是一个使用Qt对传入数据库的数据进行加密和解密的示例:

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

// 加密函数,这里使用简单的异或运算作为示例
QString encryptData(const QString& data, const QString& key)
{
    QString encrypted;
    for (int i = 0; i < data.length(); ++i) {
        QChar c = data.at(i);
        QChar k = key.at(i % key.length());
        encrypted.append(QChar(c.toLatin1() ^ k.toLatin1()));
    }
    return encrypted;
}

// 解密函数,与加密函数相反
QString decryptData(const QString& encryptedData, const QString& key)
{
    return encryptData(encryptedData, key); // 异或运算满足逆运算性质,所以解密时调用加密函数即可
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 连接到数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:"); // 内存数据库作为示例,实际应替换为具体的数据库文件名

    if (!db.open()) {
        qDebug() << "Failed to open database:" << db.lastError().text();
        return -1;
    }

    // 创建测试表格
    QSqlQuery query;
    bool success = query.exec("CREATE TABLE IF NOT EXISTS MyTable (ID INT PRIMARY KEY, Data TEXT)");

    if (!success) {
        qDebug() << "Failed to create table:" << query.lastError().text();
        return -1;
    }

    // 原始数据
    QString originalData = "Hello, World!";
    QString encryptionKey = "SecretKey";

    // 加密并插入数据
    QString encryptedData = encryptData(originalData, encryptionKey);
    query.prepare("INSERT INTO MyTable (ID, Data) VALUES (:id, :data)");
    query.bindValue(":id", 1);
    query.bindValue(":data", encryptedData);

    success = query.exec();
    if (!success) {
        qDebug() << "Failed to insert data:" << query.lastError().text();
        return -1;
    }

    // 查询并解密数据
    success = query.exec("SELECT * FROM MyTable");
    
   if (success) {
       while (query.next()) {
           int id = query.value(0).toInt();
           QString encryptedData = query.value(1).toString();
           QString decryptedData = decryptData(encryptedData, encryptionKey);
           qDebug() << "ID:" << id << ", Decrypted Data:" << decryptedData;
       }
   } else {
       qDebug() << "Failed to retrieve data:" << query.lastError().text();
       return -1;
   }

   db.close();

   return a.exec();
}

请注意,这只是一个简单的示例,实际应用中可能需要使用更强大和安全的加密算法来保护数据库中的数据。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=5648

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?