2010-06-07 37 views
17

Dưới đây là những gì tôi đã có: Phiên bảnHowTo Crypt/Mã hóa một số chuỗi (ví dụ như mật khẩu) trên Qt đơn giản

  • Qt SDK 4.6.2
  • Windows XP

Câu hỏi: cách tôi có thể chỉ cần mã hóa và mã hóa đơn giản Giá trị QString? Tôi cần điều này để có thể lưu một số chuỗi được mã hóa vào tệp INI và sau khi mở lại chuỗi mã hóa ứng dụng thành giá trị chuỗi mật khẩu thông thường.

PS: Tôi đang tìm kiếm giải pháp đơn giản và tốt đẹp.

Cảm ơn bạn đã trợ giúp!

+1

Hãy xem QCA (http://delta.affinix.com/qca/) – Job

Trả lời

10

Nếu bạn chỉ muốn sử dụng nó làm mật khẩu, hãy sử dụng QCryptographicHash. Băm mật khẩu, lưu nó vào tập tin. Sau đó, khi bạn muốn so sánh, hãy băm đầu vào và so sánh nó với mật khẩu đã lưu. Tất nhiên điều này không phải là rất an toàn, và bạn có thể nhận được vào những thứ như salting để tăng cường an ninh.

Nếu bạn chỉ muốn có thể mã hóa và giải mã một chuỗi được lưu trữ trong một tệp, hãy sử dụng cipher. Hãy xem Botan hoặc Crypto++.

Tất nhiên tất cả tùy thuộc vào mức độ bảo mật bạn muốn.

1

Thêm dữ liệu vào băm mật mã:

QByteArray string = "Nokia"; 
QCryptographicHash hasher(QCryptographicHash::Sha1); 
hasher.addData(string); 

Trả về giá trị băm thức.

QByteArray string1=hasher.result(); 

main.cpp dụ

#include <QtGui/QApplication> 
#include <QWidget> 
#include <QHBoxLayout> 
#include <QCryptographicHash> 
#include <QString> 
#include <QByteArray> 
#include <QLabel> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QWidget *win=new QWidget(); 
    QHBoxLayout *lay=new QHBoxLayout(); 
    QLabel *lbl=new QLabel(); 
    QLabel *lbl1=new QLabel("Encrypted Text:"); 
    lbl1->setBuddy(lbl); 
    QByteArray string="Nokia"; 
    QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Md4); 
    hash->addData(string); 
    QByteArray string1=hash->result(); 
    lbl->setText(string1); // TODO: use e.g. toHex or toBase64 
    lay->addWidget(lbl1); 
    lay->addWidget(lbl); 
    win->setLayout(lay); 
    win->setStyleSheet("* { background-color:rgb(199,147,88); padding: 7px ; color:rgb(255,255,255)}"); 
    win->showMaximized(); 
    return a.exec(); 
} 
+2

Nó sẽ là đơn giản để sử dụng QCryptographicHash :: băm (http://doc.qt.nokia.com/latest/qcryptographichash.html#hash). Ngoài ra, bạn có một vài rò rỉ bộ nhớ: giành chiến thắng (bao gồm tất cả các widget con của nó) và băm sẽ không bao giờ bị xóa. – Job

13

Có SimpleCrypt đây: https://wiki.qt.io/Simple_encryption_with_SimpleCrypt và như tên cho thấy tác giả nói rằng lớp không cung cấp mã hóa mạnh mẽ nhưng nó khá tốt theo quan điểm của tôi.

Bạn có thể tải về một ví dụ làm việc ở đây: http://www.qtcentre.org/threads/45346-Encrypting-an-existing-sqlite-database-in-sqlcipher?p=206406#post206406

#include <QtGui> 
#include "simplecrypt.h" 

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

    QString FreeTrialStartDate ; 

    //Set The Encryption And Decryption Key 
    SimpleCrypt processSimpleCrypt(89473829); 

    QString FreeTrialStartsOn("22/11/2011"); 

    //Encrypt 
    FreeTrialStartDate = processSimpleCrypt.encryptToString(FreeTrialStartsOn); 

    qDebug() << "Encrypted 22/11/2011 to" << FreeTrialStartDate; 

    //Decrypt 
    QString decrypt = processSimpleCrypt.decryptToString(FreeTrialStartDate); 

    qDebug() << "Decrypted 22/11/2011 to" << decrypt; 

    return a.exec(); 
} 
Các vấn đề liên quan