




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号 分类号 TP309 7TP309 7 U U D D C C D10621 408 2007 D10621 408 2007 6048 06048 0 密密 级 公级 公 开开 编编 号 号 20030320942003032094 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 LINUXLINUX 环境下的密文聊天系统的设计与实现环境下的密文聊天系统的设计与实现 论文作者姓名 论文作者姓名 蔡谋理蔡谋理 申请学位专业 申请学位专业 网络工程网络工程 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 王敏王敏 论文提交日期 论文提交日期 20072007 年年 0606 月月 1 1 日日 LINUXLINUX 环境下的密文聊天系统的设计与实现环境下的密文聊天系统的设计与实现 摘摘 要要 随着计算机的不断普及和互联网技术在全球领域的高速发展 越来越多的 人使用到了聊天程序 聊天程序给人们带来通信便利的同时也存在着一些安全 隐患 传统的聊天程序以明文方式传送聊天内容 这样就给一些用心不良的人 大开方便之门 本系统正是基于以上原因而设计的加密聊天程序 聊天程序采 用服务器 客户端模式 在 Linux 环境下采用 socket 套接口编程 服务器程序 以创建线程池的方式为每一个客户服务 聊天内容由服务器转发 在聊天程序 中加入了对称加密算法 DES 和非对称加密算法 RSA 其基本实现是由服务器端 生成 RSA 的公钥和私钥 由客户端生成 DES 对称密钥 服务器端传送公钥至客 户端加密 DES 密钥之后回传服务器 服务器再用本地的私钥解密获得 DES 密钥 此后双方的通信由 DES 密钥加密后传送 这样既能高效的加密明文又能在信道 上安全的传送密钥使得密钥间的共享成为现实 关键词 关键词 对称加密算法 非对称加密算法 会话密钥 聊天系统 The Design and implementation of encrypted chat system based on Linux Abstract Along with Computer becoming more and more popular and Internet technology developing rapidly a lot of People began to use the IM chat program Chat program brings people more convenience but at the same time security problem existed The traditional chat program sends the message by plain text which open the door for the bad man This encrypted chat system is right based on the point The system is in C S architecture using socket based on Linux The server program serves each client in the way of establishing thread and is responsible to transfer message The DES algorithm and RSA algorithm are used to encrypt in this program The basic principle is that the server generates RSA public key and private key and client generates DES symmetrical secret key Firstly the server sends the public key to client and then client sends it back after encrypting DES secret key Secondly the Server uses local private key to decode to obtain the DES private key After then the message is sent after encrypted by DES secret key So the plain text can be encrypted effectively and sent in channel in security Key words symmetry encrypting program unsymmetrical encrypting program conversation key chat system 目目 录录 论文总页数 30 页 1引言 1 1 1课题背景 1 1 2国内外研究现状 1 1 3本课题研究的意义 1 2所采用技术的先进性分析 1 2 1DES 算法 1 2 2RSA 算法 2 2 3线程池 2 3系统需求分析 3 3 1聊天程序功能分析 3 3 2加密算法 3 4系统总体设计和模块划分 3 4 1系统总体设计 3 4 2模块划分 4 4 2 1DES 算法模块 4 4 2 2RSA 算法模块 6 4 2 3聊天程序模块 7 5系统实现 9 5 1DES 核心代码 9 5 2RSA 核心代码 12 5 3WEB 注册页面核心代码 15 5 4服务器端核心代码 18 5 5客户端核心代码 21 结 论 25 参考文献 25 致 谢 26 声 明 27 附 录 28 第 1 页 共 30 页 1 1 引言引言 1 11 1 课题背景课题背景 自从 TCP IP 协议族成为计算机通信的主要网络协议 基于该协议族开发的 网络应用程序数不胜数 聊天程序便是其中之一 聊天程序使人们可以通过互 联网及时传送消息 让远在千里之外的人们畅所欲言 传统的聊天程序在给人 们带来方便的同时也逐渐暴露出一些安全隐患 前不久网上登出了这样一则新 闻 上海某银行的白领丽人 因为聊天程序受监控被同事知道了个人隐私 被 迫辞去了月薪三万余元的工作 于是聊天程序的安全性受到了人们的广泛关注 1 21 2 国内外研究现状国内外研究现状 从国内外对聊天程序的加密情况看 大多数处理方式是在现有的聊天程序 基础之上添加相应的加密插件来实现加密 比较典型的例子是 Linux 平台下的 多集成聊天程序 Gaim 其中集成了 ICQ MSN QQ 等现今主流国内外聊天程序 普遍的聊天程序没有经过加密而直接传输聊天明文 Gaim 通过添加插件程序对 未加密的聊天程序进行加密传输 通信双方需要只要同时安装加密插件就可以 顺利的对聊天内容进行加密解密 这其中存在一个现而易见的问题 要是一方 加入了加密插件而另一方却没有相应的解密程序显然双方不能正确通信 1 31 3 本课题研究的意义本课题研究的意义 聊天程序是否加密关系着用户的切身利用 为了保卫公民隐私权不受到网 络黑客的不法侵犯 开发加密传输信息的聊天程序有着重大意义 聊天程序的 加密特性对用户应该是透明的 正如前面分析 如果以安装插件的方式加密聊 天程序很可能造成通信双方加密不一致的情况 因此将加密算法内嵌入聊天程 序可以保证通信双方均能正常通信 传统的对称加密算法如 DES 虽然可以快速的加密和解密明文 然而其密钥 难以分配和管理 如果让通信双方相互约定密钥显然是不合适的 因此最好的 方式是由一方产生密钥然后传送给另一方 基于公钥的非对称加密体制的引入 正是用于解决对称加密算法在密钥管理上的不足 但是非对称加密算法如 RSA 存在运算强度过大 费时较长等问题 如果直接用于加密聊天程序 其生成密 钥和加密解密所需时间是人们在通信过程中所不能容忍的 采取将两种加密算 法相结合的方式可以很好的解决以上问题 从而达到安全快速的加密数据 第 2 页 共 30 页 2 2所采用技术的先进性分析所采用技术的先进性分析 2 12 1 DESDES 算法算法 DES 是 Data Encryption Standard 数据加密标准 的缩写 它是由 IBM 公司研制的一种加密算法 美国国家标准局于 1977 年公布把它作为非机要部门 使用的数据加密标准 二十年来 它一直活跃在国际保密通信的舞台上 扮演 了十分重要的角色 DES 是一个分组加密算法 它以 64 位为分组对数据加密 同时 DES 也是一 个对称算法 加密和解密用的是同一个算法 它的密钥长度是 56 位 因为每个 第 8 位都用作奇偶校验 密钥也可以是任意的 56 位数 而且可以任意时候改 变 其中有极少量的数被认为是弱密钥 但是很容易避开它们 所以保密性依 赖于密钥 2 22 2 RSARSA 算法算法 1978 年 美国麻省理工学院 MIT 的研究小组成员 Ronald L Rivest Adi Shamir Leonard Adleman 提出了一种基于公开密钥密码体制的 优秀加密算法 RSA 算法 RSA 的取名就是来自这三位发明者姓氏的第一个字 母 该算法以其较高的保密强度逐渐成为一种广为接受的公钥密码体制算法 RSA 算法是一种分组密码体制算法 它的保密强度是建立在具有大素数因子的 合数 其因子分解 NP Nondeterministic Polynomial 完全问题这一数学难 题的基础上的 因此 RSA 算法具有很强的保密性 RSA 算法研制的最初目标是解决 DES 算法秘密密钥利用公开信道传输分发 困难的难题 而实际结果不但很好地解决了这个难题 还可利用 RSA 来完成对 消息的数字签名以防对消息的抵赖 同时还可以利用数字签名发现攻击者对消 息的非法篡改 以保护数据信息的完整性 RSA 算法是第一个能同时用于加密和数字签名的算法 也易于理解和操作 RSA 是被研究得最广泛的公钥算法 普遍认为是目前最优秀的公钥方案之一 RSA 得到了世界上的最广泛的应用 并于 1992 年 ISO 国际标准化组织在其颁发 的国际标准 X 509 中 将 RSA 算法正式纳入国际标准 2 32 3 线程池线程池 在传统的 UNIX 模型中 当一个进程需要另一个实体来完成某事时 它就 fork 一个子进程并让子进程去执行处理 Unix 上的大多数网络服务器程序就是 这么编写的 父进程 accept 一个连接 fork 一个子进程 该子进程处理与该 连接对端的客户之间的通信 尽管这种范式多少年来一直良好地服务着 fork 调用却存在一些问题 1 fork 是昂贵的 fork 要把父进程的内存映象拷贝到子进程 并在子进程中复制 第 3 页 共 30 页 所有描述字 如此等等 2 fork 返回之后父进程之间信息的传递需要进程间通 信 IPC 机制 调用 fork 之前父进程向尚存在的子进程传递信息相当容易 因为子进程将从父进程数据空间及所有描述字的一个拷贝开始运行 然而从子 进程往父进程返回信息却比较费力 线程有助于解决这两个问题 线程有时称为轻权进程 lightweight process 因为线程比进程 权重轻些 也就是说 线程的创建可能比进程的 创建快 10 100 倍 线程池是指在服务器启动阶段预先创建一系列线程阻塞于 accept 调用 每 个客户由当前可用线程池中的某个 闲置 线程处理 这种处理方式比通常的 客户连接到来时临时创建线程为其服务要快得多 可以获得很好的性能加速 3 3系统需求分析系统需求分析 3 13 1 聊天程序功能分析聊天程序功能分析 1 注册功能 通常聊天程序需要用户名和密码才能使用 所以需要实现 web 注册功能 这样用户可以很方便的通过 web 网站注册自己的用户名并取得密码 还可以在 服务器上存储个人相关信息以便他人查看 2 登陆功能 用户在聊天之前需要输入用户名和密码进行登陆以便获取自身相关信息和 好友相关信息 故登陆过程中服务器需对用户名和密码进行必要的核对 3 聊天功能 这是聊天程序的主要功能 用户之间的相互通信必须及时快速的由服务器 转发 3 23 2 加密算法加密算法 由于是加密聊天程序 故对聊天明文的加密算法应选取加密速度相对较快 的对称加密算法 如 DES 又由于 DES 的加密密钥是不能公开的秘密密钥 故对 DES 的密钥应加密传送 所以应采用非对称的公钥加密算法 如 RSA 用 以分发 DES 密钥 DES 加密算法 作为对称加密算法中的 DES 加密算法由于其加密过程是固定不变的 故应 考虑其密钥的生成 由于弱密钥存在的可能性 还应该考虑如何避免生成弱密 钥 因为差分分析法的提出可以快速的破解少于 16 轮迭代的 DES 算法 故应保 证其迭代次数至少为 16 轮 RSA 加密算法 由于 RSA 是基于大素数因子分解这一数学难题提出的 故 RSA 中公钥和私 第 4 页 共 30 页 钥的产生应重点考虑 又由于 RSA 的运算强度较大 故还应考虑如何加速其运 算速度 4 4系统总体设计和模块划分系统总体设计和模块划分 4 14 1 系统总体设计系统总体设计 图 1 系统设计 如图 1 所示 本系统采用 C S 模式 1 用户通过 web 应用程序注册帐号 然后用注册的帐号登陆聊天程序服务 器 2 客户端产生生成 DES 密钥 服务器端在启动时初始化产生 RSA 公钥和私 钥 当客户端向服务器发起连接时 服务器送出 RSA 公钥 客户端用取得的公 钥加密产生的 DES 私钥回传服务器 3 最后服务器与客户端双方的通信均由 DES 加密算法加密通信明文 4 24 2 模块划分模块划分 4 2 14 2 1 DESDES 算法模块算法模块 1 加密算法 3 个主要步骤 第一步 初始置换 IP 第 5 页 共 30 页 图 2 初始置换表 IP 图 2 为初始置换表 IP 64bit 输入明文经过该表完成初始置换 第二步 16 轮迭代 图 3 16 轮迭代 图 3 为 DES16 轮迭代 将经过初始置换的数据分成 Li 和 Ri 两部分 将 Ri 直接交换为 Li 1 Li 与 Ri 经过 f 函数处理后的数据相异或得 Ri 1 最后一轮 不做交换 第三步 逆置换 第 6 页 共 30 页 图 4 逆置换表 IP 1 图 4 为逆置换表 IP 1 经过 16 轮迭代后通过该表置换得到输出的密文 2 子密钥的产生 图 5 生成子密钥 图 5 为子密钥生成过程 将 64bit 初始密钥经过 PC 1 表置换为 56bit 输入 分为 Ci Di 两组分别进行 LS 循环左移 再经过 PC 2 表压缩为 48bit 子密钥 如此循环 16 轮生成 16 组子密钥 4 2 24 2 2 RSARSA 算法模块算法模块 1 大数的运算 加法运算 设定相应的进位变量 c 按位相加 如 ri ai bi c 当 ai bi c m m 为权值 c 送 1 ri ai bi c mod m 否则 c 送 0 减法运算 设定相应的借位变量 c 按位相减 如 ri ai bi c 当 ai m m 位权值 c 送 ri m m 为权值 d 为 从对应的内外循环位之和 i j 对应的结果位上取得的值 r i j 暂时存入 第 7 页 共 30 页 对应的结果位 除法运算 假设 A 为被除数 B 为除数 当 A B 将 B 扩大到 A 相同位数 循环做 A A Bk 扩充后的 B 商位 qi qi 1 最后 A 为余数 取余运算 依除法运算输出余数 A 乘方运算 与乘法运算一样设有进位变量 c 和取当前结果位值变量 d 依然分内外两 层循环 外层循环中 d r 2 i r 2 i d ai ai 在此仅计算 相同位 ai 的乘积存入结果位 r 2 i 中 内层循环 d r i j r i j d 2 ai aj c 这里由于乘数 A 和被乘数 B 相等 故可以采用 2 ai aj 这种方式提前运算对应位 可以看出这种预处理方式加快了运算速度 模幂运算 将模幂运算转化为乘模运算 定理 a b mod n a mod n b mod n mod n 计算 A m mod n 令 c 1 如果 m m 2 0 循环计算 A A A mod n 否则 m m 1 c A c mod n 最后输出 c 2 选取 P Q 先以生成随机数的方式生成随机奇数 A B 再让 A B 依次通过 Miller Rabin 素性测试 Miller Rabin 素性测试 先计算出 m j 使得 n 1 m 2 j 其中 m 是正奇 数 j 是非负整数 随机取一个 b 2 b r a mod b a b b r 循环以上三步直到 r 0 则 a 为所求最小 公因数 r a mod b x a y b r x 称为 a 的逆元 在每步循环 过程中将前一步中的 r 代入下一步中合并后可求得逆元 x 4 2 34 2 3 聊天程序模块聊天程序模块 1 数据库设计 用户信息表 User Infor 存储注册用户的信息 CREATE TABLE User Info 第 8 页 共 30 页 user id INTEGER AUTO INCREMENT PRIMARY KEY user name VARCHAR 50 NOT NULL user passwd VARCHAR 10 NOT NULL user sex VARCHAR 10 user age INTEGER user address VARCHAR 100 INDEX user name ENGINE InnoDB 指定存储引擎 好友关系表 Friend Index 记录用户添加的好友 CREATE TABLE User Online user id INTEGER PRIMARY KEY ip address VARCHAR 100 NOT NULL conn socket INTEGER NOT NULL FOREIGN KEY user id REFERENCES User Info user id ENGINE InnoDB 在线用户记录表 User Online 记录已登陆的在线用户和与服务器建立的 套接口 CREATE TABLE User Online user id INTEGER PRIMARY KEY conn socket INTEGER NOT NULL des key VARCHAR 30 NOT NULL FOREIGN KEY user id REFERENCES User Info user id ENGINE InnoDB 消息记录表 Messages 缓存发给离线用户的消息 CREATE TABLE Messages message id INTEGER AUTO INCREMENT PRIMARY KEY from id INTEGER NOT NULL to id INTEGER NOT NULL body TEXT NOT NULL date posted TIMESTAMP NOT NULL 第 9 页 共 30 页 INDEX to id FOREIGN KEY from id REFERENCES User Info user id FOREIGN KEY to id REFERENCES User Info user id ENGINE InnoDB 2 Web 注册页面模块 用户管理 用于管理用户的注册和登陆 添加好友 查询数据库中注册用户 选择要添加的好友插入数据库 3 聊天程序服务器端 初始化套接口 初始化 RSA 算法生成公钥和私钥 创建线程池等待连接 送出 RSA 公钥 接收 DES 密钥 验证登陆信息 服务登陆客户负 责消息转发 4 聊天程序客户端 初始化套接口 生成 DES 密钥 向服务器发起连接 取得 RSA 公钥加密 DES 密钥后回传服务器 发送登陆信息 接收好友信息 创建发送消 息线程和接收消息线程与好友通信 5 5系统实现系统实现 5 15 1 DESDES 核心代码核心代码 DES 类声明 class DES public DES unsigned long long 构造函数仅传入密钥 void encrypting unsigned long long 加密函数 void decrypting unsigned long long 解密函数 private 明文处理 bitset IP permute unsigned long long 初始置换 unsigned long long IP 1 permute bitset 逆置换 加密过程 bitset E permute bitset E 盒子置换 unsigned long long b1b6 bitset int int unsigned long long b2b3b4b5 bitset int int int int bitset SBox Process bitset S 盒子置换 void P permute bitset P 置换 第 10 页 共 30 页 bitset f bitset bitset f 函数 子密钥生成 bitset PC 1 permute unsigned long long PC 1 置换 void LSi bitset 循环左移 bitset PC 2 permute bitset PC 2 置换 void create k unsigned long long bitset k 16 子密钥数组 子密钥生成 void DES create k unsigned long long key bitset CiDi 0 CiDi PC 1 permute key PC 1 置换 bitset Ci 0 Di 0 for int i 0 i 56 i 将经过 PC 1 置换的数据分成左右 28 比特 if i 28 Ci i CiDi i else Di i 28 CiDi i for int i 0 i 16 i 16 轮循环 LSi Ci LSI i LS 循环左移 LSi Di LSI i LS 循环左移 for int j 0 j 56 j 再将 28 比特数据合为 56 比特数据 if j 28 CiDi j Ci j else CiDi j Di j 28 k i PC 2 permute CiDi 存入子密钥数组 第 11 页 共 30 页 加密算法 void DES encrypting unsigned long long bitset Li 0 Ri 0 buf 0 ip IP permute msg IP 初始置换 for int i 0 i 64 i 等分成左右 32 位数据 if i 32 Li i ip i else Ri i 32 ip i for int i 0 i 16 i 16 轮迭代 if i 15 buf Li Li Ri Li Ri 1 Ri f Ri k i f 函数处理 Ri 1 Ri buf Ri f Ri 1 ki XOR Li 1 else 最后不再互换 buf Ri Ri f Ri k i Li Ri Ri buf for int i 0 i 64 i 将两部分 32 数据组合回 64 位数据 if i 32 第 12 页 共 30 页 ip i Li i else ip i Ri i 32 msg IP 1 permute ip IP 1 逆置换 return 5 25 2 RSARSA 核心代码核心代码 大数类声明 class BigNum public BigNum char a NULL unsigned long n 0 Status s 0 BigNum BigNum absadd BigNum BigNum 绝对值相加 BigNum abssub BigNum BigNum 绝对值相减 BigNum operator BigNum 加号重载 BigNum operator BigNum 减号重载 BigNum operator BigNum 乘号重载 BigNum operator BigNum 除号重载 BigNum operator BigNum 取余重载 BigNum square 乘方运算 BigNum 循环右移 friend bool operator BigNum BigNum BigNum BigNum 重载为友元 friend bool operator BigNum BigNum 重载为友元 friend bool operator BigNum BigNum 重载为友元 friend bool operator BigNum BigNum 重载为友元 void print unsigned long getsize return size char getnum return num private char num MAXNUM 第 13 页 共 30 页 unsigned long size Status symbol 正数为 1 零为 0 负数为 1 模幂运算 BigNum modexp BigNum x BigNum r BigNum p 依据定理 a b mod n a mod n b mod n mod n BigNum a b c 1 1 1 one 1 1 1 zero 0 1 0 two 2 1 1 a x b r while b zero if b two zero 是否为偶数 b b two 降阶 a a square p 乘方对 p 取余 continue b b one c a c p 乘模运算 return c 欧几里德计算最大公因数和逆元 BigNum RSA gcd BigNum BigNum q r ai 2 1 1 1 ai 1 0 1 0 bi 2 0 1 0 bi 1 1 1 1 if x y x y 互换 BigNum c y y x x c 第 14 页 共 30 页 r y while x r zero 辗转相除 y x x r q y r r y r a ai 2 q ai 1 迭代前两步 x y 逆元表达式系数 b bi 2 q bi 1 ai 2 ai 1 bi 2 bi 1 ai 1 a bi 1 b return r Miller Rabin 素性测试 bool Prime Num Miller Rabin BigNum n BigNum b 令 n 1 2 lm 其中 l 是非负整数 m 是正奇数 若 b m 1 mod n 或 b 2 j m n 1 mod n 0 i j 1 则称 n 通过以 b 为基的 Miller Rabin 测试 BigNum m j 0 1 0 one 1 1 1 two 2 1 1 zero 0 1 0 BigNum v m n one while m two zero 将 n 1 处理为 2 的 l 次方乘以 m m m two j j one if b two cout ERROR b endl exit 0 第 15 页 共 30 页 v modexp b m n if v one 若 b 的 m 次方对 n 取余等于 1 通过测试 return true BigNum i 0 1 0 while i j if v n one 满足 b 2 j m n 1 mod n 测试结束 return true v v square n i i one return false 5 35 3 WebWeb 注册页面核心代码注册页面核心代码 用户管理 php class UserManager 用户管理类 用于管理用户账户 function construct public function isValidUserid in userid 验证用户 id 的合法性 if in userid or in userid 0 return FALSE return TRUE public function isValidUserName in user name 用正则表达式检测输入名字 的合法性 if in user name or ereg alnum 1 50 in user name return FALSE else return TRUE 第 16 页 共 30 页 public function isValidPassWord in passwd 检测输入密码的合法性 if in passwd or strlen in passwd 10 echo password len strlen in passwd return FALSE else return TRUE public function createAccount in uname in pw in sex in age in address 创建账户 插入数据库 if this isValidUserName in uname 检查用户名是否正确 如果错误给出相应错误提示 echo ERROR The user name is not right or the length is too long The page will go back after 2 seconds ERROR exit if this isValidPassWord in pw 检查密码是否正确 如果错误给出相应错误提示 echo ERROR The password is not right or the length is too long The page will go back after 2 seconds ERROR exit 第 17 页 共 30 页 conn this getConnection 创建到数据库的连接 conn autocommit FALSE 关闭自动提交至数据库为事务处理状态 qstr query qstr 执行查询语句 if result1 FALSE conn rollback 出错后事务回滚 echo Insert User Info false message conn error exit user id conn insert id result2 conn commit 提交查询 if result2 FALSE echo Commit Insert false message conn error exit conn close 关闭数据库连接 return user id 返回用户账号 public function userLogin user id in password 处理用户登录 conn this getConnection 连接数据库 check query check 执行查询语句 if result FALSE echo select User Info false message conn error 第 18 页 共 30 页 exit if row result fetch assoc NULL 检查登陆用户信息是否正确 如果错误返回 FALSE conn close return FALSE conn close return row private function getConnection 连接数据库 conn new mysqli localhost andy andy2000 FreeChat if mysqli connect errno 0 errno mysqli connect errno 获取数据库连接错误号 errmsg mysqli connect error 获取数据库连接错误信息 echo Connect database failed with errno errmsg exit return conn 第 19 页 共 30 页 5 45 4 服务器端核心代码服务器端核心代码 图 6 服务器完成初始化 图 6 为服务器初始化过程和为已登录用户服务的过程 服务器先生成 RSA 算法所需的公钥和私钥 当连接到来时服务器送出 RSA 公钥并等待用户回传 DES 密钥 当用户传回 DES 密钥后 服务器用 RSA 私钥解密得到 DES 密钥 此 后用户登录信息由此 DES 密钥解密 用户发送的消息由服务器转发 线程函数 为登陆客户服务 void service int connfd RSA rsa char buf MAXLINE user login login int n check unsigned long long key publickey pk pk e rsa e pk n rsa n send rsa publickey connfd pk 发送 RSA 公钥 cout 公钥已送出 endl 第 20 页 共 30 页 cerr 正在获取 des 密钥 请稍后 ends key getdeskey connfd rsa 获取 DES 私钥 cout ok endl if key 0 return if n readn connfd void buf MAXLINE 0 从套接口上读取用户登陆信息 cout Read from socket connfd false message strerror errno endl exit ERROR else if n 0 cout The client close socket password 16 key bcopy void data Decrypting void login password 11 解密用户登陆口令 cout No user id 请求登录 endl if check Attestation connfd login 认证用户登陆消息 cout Wrong user name or wrong password endl cout 登录失败 endl return else if check 0 return cout 登录成功 user id key 插入在线用户表 if GetFriends connfd login user id user id key user id key 服务在线用户 负责转发消息 第 21 页 共 30 页 return 发送 RSA 公钥 Status send rsa publickey int sockfd publickey key 向客户端发送 RSA 公钥 char buf MAXLINE int n bcopy void 将 RSA 公钥拷贝到发送缓冲区 if n writen sockfd buf MAXLINE 0 向套接口写公钥 cout Send public key to socket false message strerror errno endl return ERROR return OK 获取 DES 密钥 unsigned long long getdeskey int sockfd RSA rsa 从客户端取得经 RSA 加密后的 DES 密钥并解密出来 int n char buf MAXLINE unsigned long long deskey BigNum c m if n readn sockfd buf MAXLINE 0 从套接口读取 RSA 加密后的 DES 密 钥 cout Read from socket sockfd for get key false message strerror errno endl return 0 else if n 0 cout The client close socket endl return 0 第 22 页 共 30 页 bcopy void buf void m rsa decrypting c 解密得 DES 密钥 str to longlong m getnum deskey 将字符串型的 DES 密钥转换为 longlong 型 return deskey 5 55 5 客户端核心代码客户端核心代码 图 7 两客户端正常通信 图 7 为经过 DES 正常加密解密的两客户端间的正常通信过程 图 8 无 DES 解密过程客户端与正常客户端通信 图 8 左边为 DES 正常加密解密的客户端 右边为没有解密过程的客户端 故收到的信息为经 DES 算法加密过后的乱码 发送消息线程 void Send Message void arg 第 23 页 共 30 页 Message message SockFriend pf char buf MAXLINE src int i 0 pf SockFriend arg while 1 cout friendonline cout friendoffline cout endl InputString src 输入要发送用户得 id Change ston src message friend id cout Message key bcopy void data Encrypting void message message sizeof message message 将消息加密后送入 message 字符串中 cout sockfd buf MAXLINE 0 发送消息 cout Write message to pf socfd false message strerror errno sockfd buf MAXLINE 0 从套接口上读取加密后的信 息 if n 0 break bcopy void buf void data new DES Data void message message 296 pf key bcopy void data Decrypting void message message sizeof message message 将消息解密后送到 message 字符串中 fri FindFriend pf friendonline message friend id if fri cout n friendname friend id friendoffline message friend id if fri cout n friendname friend id said else cout nSkyGod message friend id say cout message message endl 打印出出接收到的消息 cout The server must meet some problem sockfd exit ERROR 第 25 页 共 30 页 结结 论论 通过本次课题的研究 可以看出近代密码学的兴起给密码学研究带来了新 的活力 非对称加密算法的提出和实现在信息安全领域得到广泛应用 然而非 对称加密算法的运算强度普遍较高 如何加快非对称加密算法的运算速度一直 是人们讨论的问题 正是由于以上原因 传统的对称加密算法以其高效性和安 全性依然倍受人们关注 在更好的新型加密算法尚未研究出来以前 如何利用 好现有的两大密码学体系更好的解决实际问题是目前人们所要关注和探讨的 也是本系统设计的关键所在 传统的服务器程序在客户连接到达时临时派生进程的做法效率较低 同时由 于进程的创建拷贝了主进程中所有变量使得进程负担过重从而造成系统整体性 能下降 线程的引入解决了进程负担过重的弊端 然而线程共享全局内存的同时 却带来了新的问题同步和互斥 因此编写与线程有关的程序时应处理好同步和 互斥的问题以保护共享数据不被破坏 良好的服务器编程范式可以帮助我们提 高系统性能 通过预派生线程生成线程池的方式可以很好的节省系统服务的时间 参考文献参考文献 1 Marc Wandschneider PHP 和 MySQL Web 应用开发核心技术 北京 机械工业出版社 2006 2 美 BILL FENNER ANDREW M RUDOFF UNIX 网路编程 第 1 卷 套接口 API 北京 清华 大学出版社 2006 3 美 Kurt Wall GNU Linux 编程指南 北京 清华大学出版社 2002 4 卢开澄 计算机密码学 计算机网络中的数据保密与安全 北京 清华大学出版社 2003 5 刘建民 王育民 网络安全 技术与实践 北京 清华大学出版社 2005 6 赖溪松 韩亮 张真诚 计算机密码学及其应用 北京 国防工业出版社 2001 7 美 Jasmin Blanchette Mark Summerfield C GUI Programing with Qt4 Prentice Hall Publisher 2006 第 26 页 共 30 页 致致 谢谢 本论文的工作是 2007 年 2 月至 2007 年 6 月在成都信息工程学院网络工 程系完成的 本文是在王敏老师的热情关心和指导下完成的 她渊博的知识和 严谨的治学作风使我受益匪浅 对顺利完成本课题起到了极大的作用 在此向 她表示我最衷心的感谢 在论文完成过程中 本人还得到了彭朝仿同学的热心帮助 本人向他表示 深深的谢意 最后向在百忙之中评审本文的各位专家 老师表示衷心的感谢 作者简介 姓 名 蔡谋理 性别 男 出生年月 1984 年 2 月 27 日 民族 汉 E mail andycai sc 第 27 页 共 30 页 声声 明明 本论文的工作是 2007 年 2 月至 2007 年 6 月在成都信息工程学院 网络工程系完成的 文中除了特别加以标注地方外 不包含他人已经发表或撰 写过的研究成果 也不包含为获得成都信息工程学院或其他教学机构的学位或 证书而使用过的材料 除非另有说明 本文的工作是原始性工作 关于学位论文使用权和研究成果知识产权的说明 本人完全了解成都信息工程学院有关保管使用学位论文的规定 其中包括 1 学校有权保管并向有关部门递交学位论文的原件与复印件 2 学校可以采用影印 缩印或其他复制方式保存学位论文 3 学校可以学术交流为目的复制 赠送和交换学位论文 4 学校可允许学位论文被查阅或借阅 5 学校可以公布学位论文的全部或部分内容 保密学位论文在解密后遵 守此规定 除非另有科研合同和其他法律文书的制约 本论文的科研成果属于成都信 息工程学院 特此声明 作者签名 2007 年 06 月 日 第 28 页 共 30 页 第 29 页 共 30 页 附附 录录 A DES 安全性讨论 1 弱密钥 所谓的弱密钥是指在所有可能的密钥中 有某几个特别的密钥 会降低 DES 的安全性 所以使用者一定要避免使用这几个弱密钥 而弱密钥产生的原 因是由于子密钥产生过程的设计不当所导致的 由子密钥产生的过程来看 假设有某个初始密钥经过密钥初始置换表置换 使得寄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化监管与信息共享-洞察及研究
- 结核菌与巨噬细胞互作-洞察及研究
- 与行业专家合作分享市场洞察
- 云计算数据流通规程
- 人工智能伦理道德管理探讨
- 北京奥林匹克森林公园绿地:解锁夏季温湿效应与生态调节密码
- 创新驱动与转型发展:津市市县域经济的突破路径与实践
- AdaBoost人脸检测算法在复杂背景下的挑战与突破:理论、优化与应用
- 内环境稳态调控机制与生物多样性维持-洞察及研究
- 企业社会责任与会计事务所品牌价值-洞察及研究
- 工程质量保证体系框图
- 疥疮防与治课件
- 饮食营养与健康课件
- 地下车库系统环氧地坪施工组织设计
- 2022年浙江省公务员录用考试《申论》试卷及参考答案
- 医共体成员单位人力资源工作制度
- YY∕T 0953-2020 医用羧甲基壳聚糖(高清正版)
- 如何建立高效学习小组
- 手卫生持续质量改进ppt课件
- 生物医学工程导论课件
- 宠物市场调研报告
评论
0/150
提交评论