Qt实现客户端/服务器端登录验证|数据传输使用md5加密
来源:互联网 发布:零基础美工基础知识 编辑:程序博客网 时间:2024/05/17 09:28
要完成两个模块:客户端和服务器端。即实现通过客户端向远程服务器段发送数据来验证,以此来实现简单的认证功能。同时,客户端在向服务器段发送的数据通过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加密的操作(在服务器端同样如此)。登录验证成功和失败均弹出一个对话框给予结果提示,分别如图4、5所示。
这个是支持多个客户端同时验证。并非一对一的连接传输,而是多对一的连接传输。可以打开多个客户端进行登录验证操作。
关于源代码的使用
仅仅安装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。
- Qt实现客户端/服务器端登录验证|数据传输使用md5加密
- Qt中利用TCP实现客户端与服务器端的数据传输
- Qt中利用TCP实现客户端与服务器端的数据传输
- JSP使用MD5加密进行登录验证
- qt 实现md5 算法加密
- 8、使用JavaScript与Servlet实现客户端与服务器端验证
- 使用JavaScript与Servlet实现客户端与服务器端验证
- QT MD5 SHA1加密使用
- 客户端信息MD5加密并传递参数给服务器端
- 利用Servlet和jsp实现客户端与服务器端的用户登录信息验证
- javascript+Java 实现MD5加密登录密码
- javascript+Java 实现MD5加密登录密码
- JAVA简单实现MD5注册登录加密
- socket实现用户端 登录 服务器端 用户名验证
- 使用openssl实现md5加密
- 使用MD5实现简单加密
- 客户端跳转vs服务器端跳转以及登录验证
- 使用md5加密算法实现登录
- 第3章 Android程序设计基础
- 设计模式 一 简单工场模式
- ubuntu 下安装memcache
- 一道残忍的数学题
- android json解析及简单例子
- Qt实现客户端/服务器端登录验证|数据传输使用md5加密
- 第4章 用户界面开发基础
- 谈谈本次acm之行
- 在STS中写一个Servlet项目
- android有用代码片段
- C++静态成员注意事项
- 【生活随笔】井冈山之行
- 设计模式之Facade
- SLF4J