信息安全技术课程设计-常用密码算法的设计与实践(编辑修改稿)内容摘要:
大素数计算相应的密钥,这里的密钥包括 公钥 e,私钥 d 以及模 n。 将生成的密钥导出存在一个文本文档中,以便使用。 然后 选择所需要加密或解密的文件,系统根据文件的类型自动分配加密或解密的算法对其进行操作。 在进行加密或解密操作时算法是较为类似的,都是进行了一个模运算的操作, 只是计算的系数有所不同, 加密时的系数为公钥 e,而解密时用的则是私钥 d。 因此在设计 RSA 算法时只需要编写一个函数 ,在程序调用此函数时传不同的参数即可实现加密与解密的功能。 ( 3) 混合加密设计 混合加密算法利用了两种加密算法对文件进行加密,该算法的主要思想如下: 首先,通过素数的生成算法,得到两个大的素数 p 和 q, 利用 RSA 加密算法中密钥生成算法,生成一把公开密钥和私有密钥,其中将 rsa 公钥通过某种方式公布出去,而把 RSA 私钥保存。 然后,通过线性同余法产生一个 64 位的随机数作为 DES 的会话密钥,对明文进行 DES 加密和解 密。 最后,是利用 RSA的公钥对会话密钥进行 RSA 加密 , 并将会话密钥进行加密保存,并与 DES 加密后的密文合并。 接收方对传送过来的密文用 RSA 生成的私钥进行解密。 ( 4) 功能函数的定义 a) DES 算法部分 关键函数 ① . 标准 DES 加密 /解密函数 static void SDES(char Out[8], char In[8], const PSubKey pSubKey, bool Type)。 第 13 页,共 31 页 函数共带有四个形参, Out[8]为输出字符串, In[8]为输入字符串, pSubKey为密钥, Type 是用来判断调用标准加(解)密函数时是为了加密还是解密。 ② . 设置密钥函数 static void SetKey(const char* Key, int len)。 函数共有两个形参, Key 表示初始密钥, len 表示密钥的长度。 ③ . 设置子密钥函数 static void SetSubKey(PSubKey pSubKey, const char Key[8])。 函数共有两个参数, pSubKey 是 PSubKey 类型的密钥, Key[8]是用于一个分组中的密钥。 值得说明的是 PSubKey 类型是之前在程序中以结构体形式定义的 bool 类型的数据类型,其目的用于规定标准密钥的长度。 ④ . 查表变换函数 static void Transform(bool *Out, bool *In, const char *Table, int len)。 函数共有四个形参,分别为查表前的输入 bool *In、查表后的输出 bool *Out、选择的表 const char *Table 以及返回值长度 int len。 b) RSA 算法部分 ① . 获取随即大素数函数 GetPrime(BigInt amp。 P,UINT len) 函数有两个参数,分别为大数 P,以及大数的长度。 ② . RSA 加密函数 Encrypt(char *Out,char *In,UINT len,char *KeyStr,char *ModStr) 函数共有五个参数,分别为输出加密后的结果 Out,输入加密前的文件 In,加密文件的长度 len,密钥 Key 以及模 n 的值 n。 ③ . RSA 解密函数 Decrypt(char *Out,char *In,UINT len,char *KeyStr,char *ModStr) {return Encrypt(Out,In,len,KeyStr,ModStr)。 } RSA 解密函数的参数与加密函数的参数完全相同,且返回值为加密函数的返回值。 c) 混合加密算法部分 ① . 加密函数 Encrypt(char *OutFile,char *InFile,char *RsaKeyStr,char *RsaModStr,bool 第 14 页,共 31 页 Is3DES=0) 函数共有五个参数,分别为加密后的输出文件 OutFile,加密前的输入文件InFile,加密时 RSA 的密钥 Key,模 n 的值以及是否选择三重 DES 加密。 ② . 解密函数 Decrypt(char *OutFile,char *InFile,char *RsaKeyStr,char *RsaModStr) 函数共有四个参数,与加密函数的前四个参数完全相同,分别为加密后的输出文件 OutFile,加密前的输入文件 InFile,加密时 RSA的密钥 Key 以及模 n 的值。 文件操作模块 a) 文件读取模块 文件读取模块主要是将文件中的内容读入字符数组中,由于系统的加密和解密功能是基于数组进行操作的,因此在将文件中的内容读入数组时就已经做好了加密的准备。 文件读取模块包含两方面的内容,一是需要获取文件的路径,而是要实现将文件中的内容读入 Edit 控件 以及 数组中。 b) 文件存储模块 文件存储模块主要是将加密或是解密的结果写入文件,这里为了实现分组密码体质的思想,用的是 MFC 中 CFile 类 的文件读入读出标准函数,它的好处是有一个特定的文件指针,在读入一个分组后指针自动移向下一个分组的开头。 文件存储模块的功能主要包含两部分,一部分是新建一个用于存放结果的文本文档,另一部分是将数据写入这个文本文档。 帮助模块 帮助模块主要是为使用系统的 用户提供算法原理的介绍,运用了 MFC 中的树控件进行设计。 编码 DES 核心算法模块的实现 a) 模块初始化 模块的初始化主要包含一些算法中常量定义,即初始 IP 置换表、逆初始 IP置换表、选择置换 PC1 表、选择置换 PC2 表、为选择函数 E、置换函数 P 以 第 15 页,共 31 页 及 S 盒。 这些常量的定义如下 b) 功能函数的实现 ① . 标准 DES 加(解)密函数 标准 DES 加(解)密函数是 DES 核心算法的主体,对数据或文件的加密、解密过程都需要调用这个函数对字符串或文件进行处理。 首先再次给出标准加(解)密函数的定义: void SDES(char Out[8], char In[8], const PSubKey pSubKey, bool Type) 需要说明的是 PSubKey 是之前定义的 bool 类型的一个数据类型,即typedef bool (*PSubKey)[16][48],它的是为了控制密钥的位数而定义的。 Type的取值范围只有两种可能,即 ENCRYPT, DECRYPT,分别代表加密和解密, ENCRYPT, DECRYPT 是之前用枚举法 enum 所限定的取值范围。 其次,函数主要的实现功能是为了实现对数据和文件进行加密,即调用DES 类中的各类函数代码。 首先需要对输入明文或密文进行位 转化,调用ByteToBit()函数, ByteToBit()函数的目的是将文件中的字符串进行转化,转成可以进行数组操作的二进制类型。 然后按照图 的 DES 加密算法对其进行操作。 以下是程序的关键代码及注释: 定义相关数据, M 位明文字符串, tmp 位中间变量, Li 和 Ri 分别代表明文的左右两部分: static bool M[64], tmp[32], *Li=amp。 M[0], *Ri=amp。 M[32]。 调用 ByteToBit 进行位转化: ByteToBit(M, In, 64)。 初始 IP 置换: Transform(M, M, IP_Table, 64)。 判断操作类型,用 Type 取其对应的变量,用 if 语句进行判断: if( Type == ENCRYPT ) //进行加密 { …… //加密代码 } Else //进行解密,此时 Type 取 DECRYPT { 第 16 页,共 31 页 …… //解密代码 } 其中加密代码如下: F_func(Ri, (*pSubKey)[i])。 //F 函数 Xor(Ri, Li, 32)。 //异或操作 此代码进行 16 次迭代,用 for 循环实现迭代功能。 与加密过程相同 DES 的解密也同样进行以上两个操作,唯一不同的地方是函数中的参数不同, F 函数是对密文的左半边进行操作,异或函数的两个参数正好相反,其代码如下: F_func(Li, (*pSubKey)[i])。 //F 函数 Xor(Li, Ri, 32)。 //异或操作 解密过程也需要进行 16 次迭代,用 for 循环实现。 至此完成了全部标准 DES 加(解)密函数的编写,需要指出的是该函数在调用过程中需要调用到类似 Xor 异或操作的小函数,这些函数是实现在DES 类中编译好的,由于函数较多,在此就不一一赘述了,以下挑选一些较为关键的进行简单描述。 ② . 设置密钥函数 该函数的功能是对用户输入的初始密钥进行操作,其代码和注释如下: 首先将实现定义的密钥接口 deskey 数组初始化,这里选用 memset 库 函数 进行操作: memset(deskey, 0, 16)。 其次将密钥的值赋到 deskey 数组中,由于密钥的长度不确定,因此这里考虑用 memcpy 库函数进行操作,它的优点是可以对变量指定长度赋值: memcpy(deskey, Key, len16?16:len)。 最后就可以对密钥进行操作,调用设置子密钥函数: SetSubKey(amp。 SubKey[0], amp。 deskey[0])。 ③ .。信息安全技术课程设计-常用密码算法的设计与实践(编辑修改稿)
相关推荐
盖广西电网 xx 业务 范围。 2 项目必要性 【 描述本次信息专题研究对公司信息化建设所起到的作用 】 [满足公司信息化子战略的需求 ] 可行性研究报告 2 [满足提高公司一体化系统的要求 ] [满足公司创先的要求 ] [满足公司客户的要求 ] [满足公司信息化安全的要求 ] [满足提 高效率、节省成本的要求 ] 3 项目 研究内容 项目研究内容 xxxx 的研究内容包括: xxx xxx …
设计的 检查 教研室主任负责 对 课程设计 各 环节的检查与督导工作。 尤其 在 课前检查 所有准备工作后,要在每份任务书上签名。 在课程设计收尾,还要审核所有课程设计档案材料,在成绩表上签名,必要时,安排课程设计补做。 要 及时解决 课程设计中 存在的问题 ,并要 记 录问题、处理意见及结果,以备今后总结经验,改进和完善该项工作。 第 十 条 附则 本规 定 自 20xx20xx 第一学期起试
部输入:系统内部运算后产生的信息,如产值、利润等数据。 (4)网络输入:系统内外部的计算机间互相交换或共享的数据,通过通信网的传输得到。 3. 输入设备。 用来收集和输入数据常用设备有:卡片穿孔机、纸带穿孔机、键盘、软盘输入机、磁带机、终端控制台键盘、磁性墨水阅读器、光字符识别器、光笔 、数字化仪、扫描仪以及接触式屏幕输入、语音输入、光盘机等。 随着计算机技术的迅速发展,输入方式的不断变化
四川 XX 公司服务器虚拟架构 解决方案 5 立服务器造成了资源闲置,但又无法投入其他应用。 数据分散,存储资源不足 随着公司的壮大信息化的发展,越来越多的业务依赖于信息资源,公司的信息资源也越来越多,四川 XX 公司目前的存储资源仅原有存储,已远远不能满足现有要求,存储资源的集中管理也是当前存 在的问题。 四川 XX 公司数据中心建设整体规划 利用原来性能较好的服务器,在一台物理机上通过
耗少、使用寿命长、显示内容多样、显示方式丰富、性能价格比高 等优势,已广泛应用于各行各业。 下面就我所在实习公司装配的 LED 显示屏为例简单阐述一下 LED 显示屏的驱动原理和故障维修中一些经验总结。 二、LED 显示屏驱动原理 一块 LED 大屏幕,平常我们看见的只是她华丽的色彩显示,但不知道她是如何工作的,今天,在企业的指导老师们的带领下,我才有机会真正了解 LED 显示屏的驱动结构。
设计、 C程序设计、Windows20xx 网络操作系统、 JSP 网络编程、 网络编程、软件工程、软件测试技术、 Linux 操作系统、 J2EE 企业级开发设计、 Rational测试技术、 .NET 企业级应用开发 计算机技能实训、 C++程序设计实训、计算机网络基础实训、网 页设计与制作实训、计算机组装与维护实训、计算机组装与维护实训、Inter 信息检索技术实训、 SQL Server