qt调用mysql加密接口_Qt实现客户端/服务器端登录验证|数据传输使用md5加密 | 学步园...
要完成兩個模塊:客戶端和服務器端。即實現(xiàn)通過客戶端向遠程服務器段發(fā)送數(shù)據(jù)來驗證,以此來實現(xiàn)簡單的認證功能。同時,客戶端在向服務器段發(fā)送的數(shù)據(jù)通過md5加密后再傳送。
開發(fā)環(huán)境與工具
開發(fā)操作系統(tǒng):Windows 8 Enterprise 32位
開發(fā)平臺:基于Qt5.0.1框架
集成開發(fā)工具:QtCreater 2.6.2
選用數(shù)據(jù)庫:mysql-6.0.11-alpha-win32免安裝版
數(shù)據(jù)庫設(shè)計
由于本次實驗僅僅實現(xiàn)一個簡單的用戶登錄驗證的功能,僅僅使用到一個簡單的用戶數(shù)據(jù)表。故數(shù)據(jù)庫建立的SQL語句如下:
創(chuàng)建數(shù)據(jù)庫:
CREATE DATABASE liyangDEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
創(chuàng)建用戶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的方式,不必要用戶名等其它冗余數(shù)據(jù)。
數(shù)據(jù)庫的實現(xiàn)如圖1所示。
圖1數(shù)據(jù)庫操作實現(xiàn)
服務器端的實現(xiàn)
首先,自己實現(xiàn)一個簡單的服務器,來捕獲通過客戶端發(fā)送來的QTcpSocket數(shù)據(jù)包。由于采用TCP協(xié)議實現(xiàn)的C/S應用程序,在服務器端主要使用到QTcpSocket和QTcpServer兩個核心類。
由于TCP是端對端之間的網(wǎng)絡(luò)數(shù)據(jù)連接,通過IP地址和相應的端口號的來實現(xiàn)進程間的連接,防止其他應用程序占用端口號,這里在服務器端實現(xiàn)端口號(port)的自定義。因為,客戶端連接服務器段,必須要知道服務器當前所占用的端口號(port)。
服務器控制臺界面的設(shè)計如圖2所示。
圖2服務器端控制臺設(shè)計
由于數(shù)據(jù)包是以md5密文傳送的,當數(shù)據(jù)傳送到服務器段時不可能會得到解密之后的明文。那該如何讀取數(shù)據(jù)庫信息進行驗證呢?我采取的措施是將數(shù)據(jù)庫信息遍歷的同時,也進行md5加密,進行密文間的比較驗證。這有個好處是不會出現(xiàn)sql注入等類似的攻擊;缺點也很明顯,因為要遍歷數(shù)據(jù)庫進行查詢操作,但數(shù)據(jù)庫容量很大時會浪費大量的時間。
使用Qt技術(shù)框架進行MySQL數(shù)據(jù)庫操作時,還遭遇到了沒有MySQL驅(qū)動的問題,解決方案是自己下載MySQL和Qt 5.0.1源代碼重新編譯。雖然可以直接使用MySQL提供的函數(shù)接口,但這樣實現(xiàn)起來沒有Qt自帶封裝后的類庫使用方便,這樣也使服務器端的實現(xiàn)顯得不臃腫。
客戶端登錄實現(xiàn)
比服務器端,客戶端實現(xiàn)就顯得很容易了。最終實現(xiàn)的客戶端登錄界面如圖3所示。
圖3客戶端用戶登錄
圖4登錄驗證成功
圖5登錄驗證失敗
在客戶端就直接使用QTcpSocket連接遠程服務器,MD5加密操作直接使用Qt框架中QCryptographicHash類,直接使用QCryptographicHash(QCryptographicHash::Md5);即可實現(xiàn)MD5加密的操作(在服務器端同樣如此)。登錄驗證成功和失敗均彈出一個對話框給予結(jié)果提示,分別如圖4、5所示。
這個是支持多個客戶端同時驗證。并非一對一的連接傳輸,而是多對一的連接傳輸。可以打開多個客戶端進行登錄驗證操作。
關(guān)于源代碼的使用
①安裝完整版的MySQL數(shù)據(jù)庫,并且將安裝目錄/bin/下的libmysql.dll文件拷貝到System32目錄下;
②Qt 5.0.1默認沒有安裝MySQL操作相關(guān)的驅(qū)動程序,將無法使用QSqlDatabase等相關(guān)MySQL數(shù)據(jù)庫操作類;請將提供的qsqlmysql.dll和qsqlmysqld.dll動態(tài)鏈接庫復制到Qt的安裝目錄\5.0.1\mingw47_32\plugins\sqldrivers。
③由于涉及到網(wǎng)路編程,在客戶端和服務器端程序.pro文件中添加network字段,服務器端.pro文件還要加sql字段,如QT+=coreguinetwork。
總結(jié)
以上是生活随笔為你收集整理的qt调用mysql加密接口_Qt实现客户端/服务器端登录验证|数据传输使用md5加密 | 学步园...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么导入本地文件_Pycha
- 下一篇: emf java_Java实现emf图片