• Qt实现客户端/服务器端登录验证|数据传输使用md5加密


     

          要完成两个模块:客户端和服务器端。即实现通过客户端向远程服务器段发送数据来验证,以此来实现简单的认证功能。同时,客户端在向服务器段发送的数据通过md5加密后再传送。

     

    开发环境与工具

           开发操作系统:    Windows 8 Enterprise 32位

           开发平台:           基于Qt5.0.1框架

           集成开发工具:    QtCreater 2.6.2

           选用数据库:       mysql-6.0.11-alpha-win32免安装版

     

    数据库设计

           由于本次实验仅仅实现一个简单的用户登录验证的功能,仅仅使用到一个简单的用户数据表。故数据库建立的SQL语句如下:

          创建数据库:
    
           CREATE DATABASE liyangDEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
    
           创建用户ly_user表:
    
        CREATE TABLE ly_user(
    
    id INT PRIMARY KEYAUTO_INCREMENT, 
    
    passwd VARCHAR(50) NOTNULL, 
    
    email VARCHAR(50) NOTNULL
    
    ) DEFAULT CHARSET UTF8;
    
    插入默认用户:
    
    INSERT INTO ly_user VALUES(NULL,”2010012840”,”solome@outlook.com”);
    
           注意:登录验证采用email/passwd的方式,不必要用户名等其它冗余数据。
    

           数据库的实现如图1所示。

    1 数据库操作实现

     

    服务器端的实现

    首先,自己实现一个简单的服务器,来捕获通过客户端发送来的QTcpSocket数据包。由于采用TCP协议实现的C/S应用程序,在服务器端主要使用到QTcpSocket和QTcpServer两个核心类。

    由于TCP是端对端之间的网络数据连接,通过IP地址和相应的端口号的来实现进程间的连接,防止其他应用程序占用端口号,这里在服务器端实现端口号(port)的自定义。因为,客户端连接服务器段,必须要知道服务器当前所占用的端口号(port)。

    服务器控制台界面的设计如图2所示。

    2 服务器端控制台设计

           由于数据包是以md5密文传送的,当数据传送到服务器段时不可能会得到解密之后的明文。那该如何读取数据库信息进行验证呢?我采取的措施是将数据库信息遍历的同时,也进行md5加密,进行密文间的比较验证。这有个好处是不会出现sql注入等类似的攻击;缺点也很明显,因为要遍历数据库进行查询操作,但数据库容量很大时会浪费大量的时间。

           使用Qt技术框架进行MySQL数据库操作时,还遭遇到了没有MySQL驱动的问题,解决方案是自己下载MySQL和Qt 5.0.1源代码重新编译。虽然可以直接使用MySQL提供的函数接口,但这样实现起来没有Qt自带封装后的类库使用方便,这样也使服务器端的实现显得不臃肿。

     

    客户端登录实现

    比服务器端,客户端实现就显得很容易了。最终实现的客户端登录界面如图3所示。

    3 客户端用户登录

    4 登录验证成功

    5 登录验证失败

     

    在客户端就直接使用QTcpSocket连接远程服务器,MD5加密操作直接使用Qt框架中QCryptographicHash类,直接使用QCryptographicHash(QCryptographicHash::Md5);即可实现MD5加密的操作(在服务器端同样如此)。登录验证成功和失败均弹出一个对话框给予结果提示,分别如图45所示。

    这个是支持多个客户端同时验证。并非一对一的连接传输,而是多对一的连接传输。可以打开多个客户端进行登录验证操作。

     

    关于源代码的使用

           仅仅安装Qt环境是不够的,必要的操作如下:源代码下载地址:http://www.oschina.net/code/snippet_126633_21269

           ①安装完整版的MySQL数据库,并且将安装目录/bin/下的libmysql.dll文件拷贝到System32目录下;

           ②Qt 5.0.1默认没有安装MySQL操作相关的驱动程序,将无法使用QSqlDatabase等相关MySQL数据库操作类;请将提供的qsqlmysql.dll和qsqlmysqld.dll动态链接库复制到Qt的安装目录\5.0.1\mingw47_32\plugins\sqldrivers。

           ③由于涉及到网路编程,在客户端和服务器端程序.pro文件中添加network字段,服务器端.pro文件还要加sql字段,如QT+=coreguinetwork。

       

  • 相关阅读:
    Spring的历史和哲学
    CORS简介
    LDAP概念了解
    Restful levels&HATEOAS
    python/mysql connector
    Session&Cookie 简介及使用
    XML简介
    Json简介
    《魅族官网》
    期末设计部分代码截图
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3074274.html
Copyright © 2020-2023  润新知