搜索
您的当前位置:首页正文

基于QT的密码生成器设计

来源:哗拓教育
.

沈阳航空航天大学

..

课 程 设 计 报 告

课程设计名称:嵌入式系统综合课程设计 课程设计题目:基于嵌入式Linux的密码生成器

院(系):计算机学院

专 业:计算机科学与技术(嵌入式系统方向)班 级: 学 号: 姓 名: 指导教师:周振辉 完成日期:2015年1月16日

.

目 录

第1章 系统分析 ........................................................................................................... 1 1.1 需求分析 ............................................................................................................... 1 1.2 硬件分析 ............................................................................................................... 1 1.2.1 实验环境 ........................................................................................................ 2 1.2.2 实验具体硬件 ................................................................................................ 2 1.3 软件分析 ............................................................................................................... 3 1.3.1 操作系统简介 ................................................................................................ 3 1.3.2 开发技术简介 ................................................................................................ 3 第2章 系统设计 ........................................................................................................... 5 2.1 操作系统移植 ....................................................................................................... 5 2.2 系统模块设计 ....................................................................................................... 5 2.3 函数设计 ............................................................................................................... 5 2.4 关键流程 ............................................................................................................... 6 2.4.1 系统主流程 .................................................................................................... 6 2.4.2 生成流程图 .................................................................................................... 7 第3章 系统调试及运行 ............................................................................................... 9 3.1 调试分析 ............................................................................................................... 9 3.2 结果分析 ............................................................................................................... 9 参考文献 ......................................................................................................................... 11 附 录 ........................................................................................................................... 12

..

.

第1章 系统分析

1.1 需求分析

利用嵌入式Linux和Qt,设计出一个密码生成器软件:

(1)密码包括数字,小写字母,大写字母; (2)密码必须是随机生成;

(3)界面可以设置密码生成的长度以及密码的数量; (4)可以在界面上对生成的密码进行浏览; (5)利用嵌入式Linux和Qt,在ARM 9上实现。 对上面的课设内容进行分析可知以下三点:

(1)必须要有两个输入控件输入密码的个数和密码的长度信息;

(2)还要有一个输出控件可以输出生成的密码并在界面上显示出来; (3)对于随机生成功能,则可以借用系统的产生随机数的函数,密码当中的数字,小写字母,大写字母可以用一个字符数组把他们存放在一起,产生的随机整数作为数组的下标,把对应的数组下标内容取出来就完成了随机生成这一个功能。

1.2 硬件分析

烧写开发板及程序的步骤大体如下: (一) 烧写vivi

(1)把并口线插到pc机的并口,并把并口与JTAG相连,JTAG与开发板的14针JTAT口相连,打开S-2410。

(2) 把整个GIVEIO目录拷贝到C:/WINDOWS下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下。

(3) 在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:\\WINDOWS\\GIVEIO\\giveio.inf 文件,点击确定,安装好驱动。

..

.

(4)在d 盘新建一目录bootloader,把sjf2410和要烧写的vivi 拷贝到该目录下,在命令提示符 下,进入该目录,运行sjf2410命令如下:sjf2410.exe /f:vivi在此后出现的三次要求输入参数,第一次是让选择Flash,选0;第二次是选择jtag 对flash的两种功能,也选0;第三次是让选择起始地址,选0 此后就等待大约3-5 分钟的烧写时间,当VIVI 烧写完毕后选择参数2,退出烧写。

(5) 烧录后关闭,拔掉JTAG 与开发板的连线,并用串口线连接pc 和2410。 (6) 打开超级终端,启动S-2410,启动Vivi分区后,进行分区。 (7)这时已格式化flash,千万不要重启2410,vivi>load flash vivi x 回车。 (二) 烧写内核ZImage

vivi>load flash kernel x 回车。点击超级终端任务栏上“传送”下拉菜单中的

“发送文件”,选择好镜像文件zImage,Enter,协议为Xmodem,点击“发送”,4 分钟左右zImage 烧写完毕。 (三) 烧写根文件系统

vivi>load flash root x 回车,点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择好镜像文件root.cramfs,协议为Xmodem,点击“发送\" ,10分钟左右root.cramfs 烧写完毕。

1.2.1 实验环境

1)博创UP-Star2410 2)Ubuntu操作系统 3)Qt软件

1.2.2 实验具体硬件

1) 核心资源S3C2410 ARM CPU、32M SDRAM、64M NAND FLASH。 2) 100M网卡,DM9000AE。 3) 一个USB主口,一个USB从口。

4) 一个RS232串口DB9接口。一路RS232和TTL串口从扩展插座上引出。 5)扩展插座,引出所有总线信号(经过驱动芯片)和未占用资源。 6)LCD和触摸屏接口,外接专配液晶屏/触摸屏板。

..

.

7) 电源、复位等基本资源和接口,支持博创UP-LINK和J-LINK仿真器。 8)设置了IO控制的LED和可产生硬中断的5位导航按键等简单调试资源。

1.3 软件分析

这次课设用的是Linux下的Ubuntu系统。对于程序的编写和运行用的是Qt软件。Ubuntu是完全基于Linux操作系统的,源码也是完全开放的,对于我们初学者进行程序的开发,是特别方便以及实用的。Qt是一个跨平台的C++图形用户界面库,它可以支持很多的平台,在Windows下编写的程序在Linux下用Qt也可以完美运行,而图形化用户界面以及面向对象更使得它用起来得心应手,以下我会简单介绍Ubuntu操作系统以及Qt软件。

1.3.1 操作系统简介

Ubuntu 完全基于 Linux 操作系统, 可以免费得到社区及专业机构的支持。庞大的社区是它成长的沃土,请向这片动人的热忱敞开心扉。具有 Ubuntu 精神的人心胸开阔,乐于助人,见贤思齐而不忌妒贤能,因为他/她拥有适度的自信。而这源自如下认识:“自己乃是属于一个更大的整体,当他人受到伤害或死去时,当他人受到折磨或压迫时,这个整体就会消失。”

Ubuntu 社区恪守 Ubuntu 理念:自由!软件应是自由的,应尊重人类的自由意志,它与人类之间不应有任何隔膜。本地语种,功能限制,自主改进的权利„„都不应成为使用的障碍或负担。自由,让 Ubuntu 与传统的私有软件从根本上不同: 免费不能用来遮羞,您有权修正它,直到满意为止。

Ubuntu 适合桌面和服务器。Ubuntu PC (Intel x86), 64-bit PC (AMD64) 和PowerPC (Apple iBook 和 Powerbook, G4 和 G5) 架构。

Ubuntu 包涵了超过 16,000 种软件, 核心的桌面系统却只有一张光盘, Ubuntu 覆盖了所有的桌面应用程序, 从文字处理,电子表格到 web 服务器和开发设计环境一应俱全。

1.3.2 开发技术简介

Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,

..

.

目前包括Qt、基于FrameBuffer的Qtopia Core、Qt Designer和国际化工具Qt Linguist等部分。Qt支持所有的UNIX系统,当然也包括Linux系统,

基本上Qt同X-Window上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的。不过Qt还具有下列一些优点:

(1)优良的跨平台特性。 (2)面向对象

(3)支持2D/3D图形渲染,支持OpenGL (4)大量的开发文档 (5)XML支持

..

.

第2章 系统设计

2.1 操作系统移植

首先在计算机上安装一个Vmware Workstation 11软件,新建一个虚拟机,然后设置好语言、时间、内存大小、硬盘大小、用户名和密码等等以后就可以使用了,从网上下载好的Ubuntu镜像,进行安装就可以运行Ubuntu系统了。

2.2 系统模块设计

主模块

输入选择 模块 随机生成模块 显示模块 图2.1 系统模块图

2.3 函数设计

(1)输入选择模块的设计:采用2个Qt中Input Widgets提供的Spin Box,1个输入密码的个数,一个输入密码的长度,改变选择框的值,然后用Qt关于Spin Box的函数int value() const就可以获得当前的输入值。 (2)随机生成模块的设计:

第一步:将0~9、a~z、A~Z一共62个字符存在一个一维字符数组当中; 第二步:用Qt的产生随机数函数int qrand()产生0~61的随机整数,利用产

..

.

生的随机数作为数组的下标,并把其对应的内容读取出来;

第三步:利用一个二维数组和双重循环,二维数组按行存取一条密码。 (3)显示模块的设计:利用Qt中Item Widgets提供的List Widget,用它的添加条目函数void QListWidget::addItem(QListWidgetItem * item),把二维数组按行添加进去就完成显示。

2.4 关键流程

2.4.1 系统主流程

系统的主要流程如图2.2所示。

输入密码个数numValue与长度longValue 开始 numValue>0&&longValue>0 N

Y 提示出错

随机生成numValue个longValue长的密码 N

显示生成的密码 是否显示 Y

图2.2 系统主流程图

..

.

说明:从系统的主流程图可以知道,软件首先判断输入密码长度numValue和密码长度longValue这两个值是否都大于0,如果满足条件点击生成按钮,就继续向下执行,否则就提示错误信息。

2.4.2 生成流程图

生成流程图如图2.3所示:

开始

获取numValue、longValue的值 numValue=0 Y N

结束 N 将字符存入二维数组 psdarray[MAXNUM][MAXNUM] Y 从一维字符数组 选取一个字符 longValue=0 图2.3 生成流程图

..

.

说明:根据numValue和longValue的值控制双重循环,根据longValue控制随机选择字符的次数,根据numValue控制字符串的条数。

..

.

第3章 系统调试及运行

3.1 调试分析

问题:这个程序之前有一个错误,就是随机生成的字符串有乱码,有时是正常的,有时又是错误的,出现的几率还比较大。

解决方案:在每一条密码之后加上‘\\0’之后就不在出现乱码了,原因是用‘\\0’来标识一个字符串的结束。

3.2 结果分析

软件初始化界面如图3.1所示。

图3.1 初始化界面图

..

.

软件创建界面如图3.2所示。

图3.2 创建界面图

点击击显示按钮后,显示结果如图3.2所示。

图3.3 显示结果的界面图

..

.

参考文献

[1] 刘峥嵘等. 嵌入式Linux应用开发详解[M]. 北京:机械工业出版社,2004 [2] 蔡志明等. 精通Qt4编程(第2版)[M]. 北京:电子工业出版社,2011 [3] 霍亚飞. Qt Creater快速入门[M]. 北京:北京航空航天大学出版社,2012 [4] 丁林松等. Qt4图形设计与嵌入式开发[M]. 北京:人民邮电出版社,2009 [5] 霍亚飞. Qt及Qt Quick开发实战[M]. 北京:北京航空航天大学出版社,2012 [6] 博创公司.UP-Star2410 实验指导v4.0. 北京博创兴盛科技有限公司

..

.

附 录

//mainwindow.h头文件 #ifndefMAINWINDOW_H #define MAINWINDOW_H

#include #define MAXNUM 100 namespace Ui { class MainWindow; }

class MainWindow: public QMainWindow {

Q_OBJECT public:

char psdarray[MAXNUM][MAXNUM];//定义一个存放字符串的数组 explicitMainWindow(QWidget *parent = 0); ~MainWindow(); signals:

void create(); void dis(); public slots:

void haddle_create(); void haddle_dis();

..

.

privateslots:

void on_pushButton_create_clicked(); void on_pushButton_dis_clicked(); void on_pushButton_clear_clicked(); private:

Ui::MainWindow *ui; };

#endif // MAINWINDOW_H

//mainwindow.cpp文件 #include\"mainwindow.h\" #include \"ui_mainwindow.h\" #include #include #include #include

#include #include

#include

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

ui->setupUi(this);

..

.

connect(this,SIGNAL(create()),this,SLOT(haddle_create()));// connect(this,SIGNAL(dis()),this,SLOT(haddle_dis()));// }

MainWindow::~MainWindow() {

Delete ui; }

void MainWindow::haddle_create() {

Char dateBase[]=\"0123456789abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ\"; int numValue=ui->spinBox_num->value(); int longValue=ui->spinBox_long->value(); int i; int j;

for(i=0;ifor(j=0;jint randomValue=qrand()%62;

psdarray[i][j]=dateBase[randomValue]; }

psdarray[i][j]='\\0';//字符串的末尾加'\\0',表示一个字符串结束 }

for(int i=0;i..

.

qDebug()<QMessageBox::information(this,\"提醒\",\"创建成功\"); Else

QMessageBox::information(this,\"提醒\",\"创建失败\"); }

void MainWindow::haddle_dis()//显示密码 {

int numValue=ui->spinBox_num->value(); for(int i=0;iui->listWidget->addItem(psdarray[i]); }

void MainWindow::on_pushButton_create_clicked() {

emit create(); }

void MainWindow::on_pushButton_dis_clicked()//发射显示信号 {

emit dis(); }

void MainWindow::on_pushButton_clear_clicked() {

ui->listWidget->clear(); }

..

.

课程设计总结: 这个课设是用基于Linux下的Qt做的,由于Qt的通用性和跨平台开发的优点,我用Windows下的Qt做也可以的。这个课设总体上不难,Qt当中已经包含了很多类,让我们编程变得十分方便,可以直接调用已经存在的类,减少了不少的工作。我第一次做的来的时候显示有乱码,经过周老师指点后,发现是字符串没有‘\\0’,不能知道这个字符串是否结束了,导致了乱码。这个知识在学习的过程当中已经知道,但是只有自己真正的遇到问题之后才能明白知识点,“纸上学来终觉浅,绝知此事须躬行”,就是这个道理。只有自己去实践,才能真真正正的掌握一门技术,程序员的能力是干出来的,不是做什么理论研究就可以得到了,虽然是大学的最后一年,但是我还是要抓紧时间弥补自己过去虚度的时光,把自己的编程能力再提高一个台阶。最后,衷心感谢周振辉老师的指导和提醒。 指导教师评语: 指导教师(签字): 年 月 日 课程设计成绩

..

因篇幅问题不能全部显示,请点此查看更多更全内容

Top