qt调用mysql加密接口_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加密的操作(在服务器端同样如此)。登录验证成功和失败均弹出一个对话框给予结果提示,分别如图4、5所示。
这个是支持多个客户端同时验证。并非一对一的连接传输,而是多对一的连接传输。可以打开多个客户端进行登录验证操作。
关于源代码的使用
①安装完整版的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调用mysql加密接口_Qt实现客户端/服务器端登录验证|数据传输使用md5加密 | 学步园...相关推荐
- qt调用mysql调用了存储过_Qt调用Server SQL中的存储过程
Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...
- qt连接mysql数据库原理_Qt连接数据库的两种方法
我曾经想过,无论在哪个平台下开发,都不要再接触SQL Server了,但显然不行.我们是来看世界的,不是来改变世界的,想通就好. 前两天,尝试了一下Qt下远程访问数据库.在macOS下,用Qt 5.1 ...
- qt连接mysql创建表_Qt编译mysql以及创建表后进行导入操作
鉴于很多同学对Qt编译myql总是不能成功.出现各种问题,今天特此写出本教程,希望可以帮到须要的同学. 首先,须要明确编译的目的和原理. 目的:Qt 5.2版本号曾经都是不带mysql驱动的.所以须要 ...
- ubuntu中qt调用mysql中的一些问题
前言 本人是mysql小白,公司最近有一个需求,设备上的工控机需要搭建一个mysql的数据库.然后设备上的C++应用需要操作这个mysql. 环境说明 系统:ubuntu16.04 IDE:QT 5. ...
- Qt与Mysql进行连接实现账号的注册登录和密码修改和验证码
文章目录 数据库信息 相关代码 .h mainwindow.h myinfor.h yiban.h .cpp main.cpp mainwindow.cpp(此模块是重点) myinfor.cpp y ...
- 注册登录系统(含MD5加密,注册、登录、推出、注销账号)
不废话,直接干 用户管理系统-登录(Login)篇(含MD5加密) 要引用的jar包有mysql-connector-java-5.1.44-bin.jar和log4j-1.2.15.jar(都可以在 ...
- 服务器系统如何校验md5值,怎么验证md5-NTP的MD5加密
NTP的MD5是一种验证机制,如果服务器启用MD5,不强制要求客户配置MD5验证,客户端发送MD5验证包,服务器回复MD5的NTP数据包:客户端不发送MD5验证数据包,服务器回复不含MD5的数据包.使 ...
- mysql flask-login_Flask web模板六–Flask-Login完成登录验证
在登录视图函数中通过表单提交的数据和数据库中的数据进行对比完成登录验证后可以通过Flask-Login插件实现将登录的信息写入cookie,然后对要求登录的页面进行验证,只有验证通过才能访问指定的页面 ...
- android md5加密登录,Android开发之MD5加密
将字符串进行MD5加密,返回加密后的字符串 public static String encode(String password) { try { StringBuffer sb = new Str ...
最新文章
- centso7 install Mariadb
- 机器学习算法 --- Decision Trees Algorithms
- UA PHYS515 电磁理论II 静电场问题3 边值问题及其解的唯一性
- 肝!教你用Python抓取某天下楼盘数据
- eDMA结构及工作机理的简单介绍
- jetty java_Jetty,Java和OAuth入门
- 2017.3.23下午
- Web框架——Flask系列之设置和读取cookie(十五)
- ios 简书 获取通讯录信息_iOS-授权获取通讯录
- Nodejs之旅开始
- LeetCode-50:关于浮点型数字求高次幂的高效运算
- 百度搜索框智能提示功能代码
- 台式机双系统安装(windows10+ubuntu18.04)及ROS安装的坑点解决
- Android LinearLayout实现下拉刷新
- 深度学习系列之Anchor based 和 Anchor free 目标检测方法
- 008-2018-09-12 文件操作
- 迷时师度 悟了自度
- 第四批入围企业公示——年度TOP100智能网联供应商评选
- simlink里面MATLAB Function ‘xxx‘ not supported for code generation.
- 相机光学(一)——成像系统分辨率的理论