下面是一个使用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助手提供,问题来源于学员提问