QT-MD5加密使用,密码的加密以及判定

QT-MD5加密使用 密码的加密以及判定

QT-MD5加密使用,密码的加密以及判定_第1张图片
今天做了一个原密码的判定,以及修改新密码;

1.首先在ui界面画出如上图,对应的类型为:

QT-MD5加密使用,密码的加密以及判定_第2张图片

2.在构造函数添加代码如下

sysSetting.h文件:

//*******密码界面
    ui->oldPass->setContextMenuPolicy(Qt::NoContextMenu); //取消该部件的右键菜单
    ui->oldPass->setPlaceholderText(tr("请输入旧密码!"));       //无输入时的提示信息
    ui->oldPass->setMaxLength(16);                   //最大长度
    ui->oldPass->setEchoMode(QLineEdit::Password);

    ui->newPass1->setContextMenuPolicy(Qt::NoContextMenu); //取消该部件的右键菜单
    ui->newPass1->setPlaceholderText(tr("请输入新密码!"));       //无输入时的提示信息
    ui->newPass1->setMaxLength(16);                   //最大长度
    ui->newPass1->setEchoMode(QLineEdit::Password);
    ui->newPass2->setContextMenuPolicy(Qt::NoContextMenu); //取消该部件的右键菜单
    ui->newPass2->setPlaceholderText(tr("请再次输入新密码!"));       //无输入时的提示信息
    ui->newPass2->setMaxLength(16);                   //最大长度
    ui->newPass2->setEchoMode(QLineEdit::Password);
3.准备事件过滤器 用来防止密码输入后的复制黏贴。。。
/**
 * @brief SysSetting::eventFilter   针对密码栏的事件过滤
 * @param obj
 * @param event
 * @return
 */
bool SysSetting::eventFilter(QObject *obj, QEvent *event)
{
    //将Line Edit部件转化为一个将要事件过滤的对象
    QLineEdit *pLineEdit = qobject_cast<QLineEdit *>(obj);
    if(pLineEdit != NULL)
    {
        switch(event->type())
        {
            //过滤掉鼠标移动、鼠标双击事件,可以过滤掉鼠标产生的所有事件,只需添加相应的枚举型
            case QEvent::MouseMove:
            case QEvent::MouseButtonDblClick:
                return true;
            case QEvent::KeyPress:
            {
                QKeyEvent *pKeyEvent = static_cast<QKeyEvent*>(event);
    
                //可以过滤掉键盘上的所有键,只需添加相应的枚举型
    //            if (Qt::Key_1 == pKeyEvent->key())  //1键按下不管用 可以设定需要的键
    //            {
    //                return true;
    //            }
    
                //过滤掉全选、复制、剪切、粘贴、取消、重做命令
                if(pKeyEvent->matches(QKeySequence::SelectAll)||
                        pKeyEvent->matches(QKeySequence::Copy)||
                        pKeyEvent->matches(QKeySequence::Cut)||
                        pKeyEvent->matches(QKeySequence::Paste)||
                        pKeyEvent->matches(QKeySequence::Undo) ||
                        pKeyEvent->matches(QKeySequence::Redo))
                {
                    return true;
                }
            }
        }
    }
    return QObject::eventFilter(obj, event);
}
4.在构造函数内为三个lineEdit控件添加事件过滤器
//在对应的三个控件上安装事件过滤器
    ui->oldPass->installEventFilter(this);
    ui->newPass1->installEventFilter(this);
    ui->newPass2->installEventFilter(this);
5.对密码进行判定

这里是对确认按钮的单击事件做处理:

/**
 * @brief SysSetting::on_pushButton_pass_ok_clicked 密码栏单击确认
 */
void SysSetting::on_pushButton_pass_ok_clicked()
{
    // 获取输入栏的内容
    QString oldPass = ui->oldPass->text();
    QString newPass1 = ui->newPass1->text();
    QString newPass2 = ui->newPass2->text();
    //两次新密码判定
    if(newPass1.compare(newPass2) != 0){
        QMessageBox::question(this,tr("警告"),tr("两次新密码不一致"));
        return;
    }
    //对输入的旧密码进行MD5加密处理  并与之前的密码作比较
    oldPass = QCryptographicHash::hash(oldPass.toLatin1(),QCryptographicHash::Md5).toHex();
    if(oldPass.compare(mainWin->PassWord) != 0){
        QMessageBox::question(this,tr("警告"),tr("旧密码错误,请确认!"));
        return;
    }
    //新密码的长度 设定为6
    if(newPass1.size() < 6){
        QMessageBox::question(this,tr("警告"),tr("密码太短,请填写6位以上密码"));
        return ;
    }
    // 新密码与旧密码的判定
    if(newPass2.compare(oldPass) == 0){
        QMessageBox::question(this,tr("警告"),tr("旧密码与新密码一样"));
        return;
    }
    //全部ok后  对新密码进行MD5加密处理  然后进行存储
    newPass = QCryptographicHash::hash(newPass2.toLatin1(),QCryptographicHash::Md5).toHex();
    accept();
}
6.密码的持久化

大家可以存储在文件内,每次打开访问文件提取;也可以存储在数据库,在数据库进行访问提取。
因为我这边就只有一个密码,没有用户需求,所以只存了一份密码在文件内。当然 文件被破坏,密码肯定会破坏,所以做了初始化工作;就算找到文件看到密码也不怕,因为我们用了MD5加密存储,除非能破解MD5。

7.谢谢观看。

你可能感兴趣的:(c++入门,QT学习)