字符型密码随机加密与解密算法的设计与实现
- 格式:pdf
- 大小:551.73 KB
- 文档页数:5
Python3+PyCryptodome实现各种加密算法教程⼀、说明PyCryptodome是python⼀个强⼤的加密算法库,可以实现常见的单向加密、对称加密、⾮对称加密和流加密算法。
直接pip安装即可:pip install pycryptodome⼆、Base64编码2.1 base64编码说明原理:将要编码的内容按3字节为⼀组进⾏分组,最后⼀组不够3位的则补0(显然最多补两个0)每组中每字节最⾼2位改成0不使⽤,原先各位的内容保持原有顺序往后移;最后在上⼀步中补了⼏个0就加⼏个等号以供解码时按等号个数删除0(经此操作原先3节字就变成了只使⽤低6位的4字节)⽤途:⼀是SMTP中要以BASE64形式传输⼆进制⽂件,⼆是常⽤于将⼆进制数据转成可打印的ASCII码字符进⾏存储(下⽂各加密算法的密钥⼀般使⽤⼗六进制字符串形式存储,但也有以base64形式存储)。
其他:本质上讲Base64只能算是⼀种编码不能算是⼀种加密算法,PyCryptodome库也不⽀持。
但从”Base64让⼈⼀下看不懂原本内容是什么“的⾓度讲你也不能说他完全不算加密,平时也经常⽤,我们就顺道讲⼀讲如何实现。
2.2 base64编码实现代码import base64# 编码b"123456",输出为b'MTIzNDU2'base64.b64encode(b"123456")# 解码b'MTIzNDU2',输出为b"123456"base64.b64decode(b'MTIzNDU2')三、单向加密算法3.1 单向加密算法说明别称:单向加密算法,⼜称哈希函数、散列函数、杂凑函数、摘要算法,英⽂名One-way encryption algorithm。
原理:单向加密如其名只能加密不能解密(不是正经的解密),不能解密的原因是本质上并不是⽤IV(Initial Vector)去加密M输出M的密⽂,⽽是⽤M去加密IV输出IV的密⽂。
计算机学院计算机科学与技术专业《程序设计综合课程设计》报告(20010/2011学年第一学期)学生姓名:学生班级:学生学号:指导教师:2011年01月08日文件移位加密与解密系统目录第一章.课程设计目的和要求 (1)1.1设计目的: (1)1.2 设计要求: (1)第二章.课程设计任务内容 (2)第三章.详细设计说明 (3)3.1模块描述 (3)3.2 性能 (3)3.3 输入项 (3)3.4输出项 (3)3.5算法 (4)3.7接口 (13)3.8数据文件存储说明 (13)3.9注释设计 (13)3.10限制条件 (13)3.11测试计划 (14) (14)第四章.软件使用说明 (17)第五章.课程设计心得与体会 (18)附录1:参考文献 (20)附录2:源代码 (21)第一章.课程设计目的和要求1.1设计目的:1、提高程序设计和分析的能力。
2、深入了解c++程序设计的知识与技巧.3、进一步掌握c++程序设计的思想.4、初步了解程序加密与解密的思想.1.2 设计要求:1、完整的理解课程设计任务的要求.2、用C语言实现系统.3、函数功能要划分好(结构化程序设计).4、设计的程序结构完整、简明、可读性强.5、界面友好(良好的人机交互),加必要的注释.6、设计的程序调试成功,能稳定的运行.7、提供程序测试方案.8.列出参考的文献和完整的程序清单.第二章.课程设计任务内容设计一个文件加密与解密的程序,主要功能主要包括以下内容:1.文件加密:设计三种加密算法2.文件解密。
3.实现主函数和子函数之间的参数传递.第三章.详细设计说明3.1模块描述该模块是一个简单完整的程序,主要包括3个算法。
其功能是将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥或密码(用户从键盘输入)将对应字符进行加密、解密操作并输出结果。
3.2 性能(1)要求有较快的运算速度,能很快的执行函数功能;(2) 要求程序运行稳定,无误;(3) 要求程序有良好的人机互动.3.3 输入项包括以下内容:(1)要加密的字符窜s,其类型为string类型。
加密与解密算法中的置换与替代原理在现代信息时代,数据安全已经成为一项至关重要的任务。
为了保护个人隐私和敏感信息,人们开发了各种加密和解密算法。
其中,置换与替代原理是加密与解密算法中的重要概念。
一、置换原理置换原理是指通过改变数据中的位置或顺序来实现加密的过程。
在置换加密算法中,明文中的字符或位会按照一定的规则进行重新排列,从而生成密文。
解密的过程则是将密文中的字符或位重新按照相反的规则进行排列,恢复出原始的明文。
置换原理可以通过多种方式实现,其中最常见的是置换密码和置换网络。
在置换密码中,字母或位被替换为其他字母或位,从而改变了它们在明文和密文中的位置。
而在置换网络中,数据被分成多个块,然后通过不同的置换规则进行混淆,最终生成密文。
置换原理的一个重要特点是,明文中的每个字符或位都会被替换为密文中的一个字符或位,这种一一对应的关系使得解密过程可以完全还原出原始的明文。
然而,置换原理并不能提供足够的安全性,因为简单的置换规则很容易被破解。
二、替代原理替代原理是指通过替换字符或位来实现加密的过程。
在替代加密算法中,明文中的每个字符或位都会被替换为密文中的另一个字符或位。
解密的过程则是将密文中的字符或位重新替换为原始的明文字符或位。
替代原理可以通过多种方式实现,其中最常见的是代换密码和置换-代换密码。
在代换密码中,每个字符或位都有一个对应的替代字符或位,通过替换来实现加密。
而在置换-代换密码中,明文首先会被分成多个块,然后每个块会先进行置换,再进行代换,最终生成密文。
替代原理相对于置换原理来说,提供了更高的安全性。
因为替代原理中的每个字符或位都被替换为不同的字符或位,这种一对多的关系使得破解者难以通过简单的分析来还原出明文。
然而,替代原理也存在一定的弱点,比如可以通过频率分析等手段来破解。
三、置换与替代的结合为了提高加密算法的安全性,人们将置换和替代原理结合起来,形成了置换-替代密码。
在置换-替代密码中,明文首先会被分成多个块,然后每个块会先进行置换,再进行替代,最终生成密文。
吉林工程技术师范学院《C语言程序》课程设计报告书设计题目:数据加密解密专业:班级:学生姓名:学号:指导教师:2010年06月信息工程学院目录摘要 (2)第一章绪论 (3)1 .1 C语言概述 (3)1 .2 C语言出现的历史背景 (3)第二章开发环境及相关技术的介绍 (4)2 .1 开发环境的介绍 (4)2 .2 有关开发环境的技术 (4)第三章总体设计与详细设计 (6)3 .1 本程序解决的有关技术问题 (6)3 .2 本程序流程图 (9)第四章编码实现 (12)4 .1 程序的总体实现与使用方法 (12)4 .2 实现本程序的关键C技术 (13)第五章调试与测试 (16)第六章总结与心得 (19)附录: 参考文献 (20)源代码 (21)摘要作为保障数据安全的一种方式,对于信息的加密技巧起源于欧洲,公元前2000年,埃及人是最先使用象形文字作为信息编码的人。
随着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息(明文)。
后来,被Julias Caesar(凯撒大帝)使用,也曾用于历次战争中,包括美国独立战争、美国内战和两次世界大战。
最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。
此后,由于Alan Turing和Ultra计划以及其他工程技术人员的不泄努力,盟军终于对德国人的密码成功破译了,进而导致第二次世界大战结束。
当初,美国人对于计算机的研究,主要目的是用于破解德国人的通讯密码,这在当时,人们并没有意识到计算机技术此后的发展会影响世界历史进程,从而在全球引发了一场信息革命。
随着计算机的发展,运算能力的增强,传统的密码知识和技能都变得十分简单了而很容易被人破解,于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公共密钥算法。
可以说,是计算机技术的飞速发展在推动了数据加密技术的发展。
1、RSA算法及其实现RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet 传送的数据,常用于数字签名和密钥交换,被国际上的一些标准化组织ISO、ITU、SWIFT作为标准来采用.1。
1 RSA算法的基本原理独立地选取两个大素数(保密).计算(公开),其中为欧拉函数值(保密)。
随机选取一整数e,满足,,e是公开的密钥即公钥。
用Euclid算法计算d,,d是保密的密钥即私钥。
加密变换:对明文,密文为.解密变换:对密文,明文为。
其中,加密变换、解密变换两步也可以改为用d加密,e解密,就变成签名和验证过程.1。
2 RSA算法的实现步骤1素数的产生对随机数作素性检测,若通过则为素数,否则增加一个步长后再做素性检测,直到找出素数。
素性检测采用Fermat测试。
这个算法的理论依据是费尔马小定理:如果m是一个素数,且a不是m的倍数,那么根据费尔马小定理。
实际应用,此对于整数m,需计算,再将结果与a比较.如果两者相同,则m为素数。
选取a=2,则a一定不会是任何素数的倍数。
步骤2随机数的产生随机数不仅用于密钥生成,也用作公钥加密时的填充字符。
它必须具有足够的随机性,以防止破译者掌握随机数的规律后重现密钥的配制过程或者探测到加密块中的明文。
因为在计算机上不可能产生真正的随机数,实际采用周期大于2256位的伪随机序列发生器。
步骤3密钥的生成(1)选择e的值为2623883或者94475891;(2)随机生成大素数p,直到gcd(e, p—1)=1;(3)随机生成不同于p的大素数q,直到gcd(e,q—1)=1;(4)计算n=pq,φ(n)=(p-1)(q—1);(5)计算d,;(6)计算dmod(p—1),dmod(q—1);(7)计算(q—1)modp;(8)将(e,n)放入RSA公钥;将n,e,dmod(p—1),dmod(q-1),(q-1)modp 放入RSA私钥。
步骤4加密利用RSA加密,第一步需要将明文数字化.假定A、B统一明文编码方式为空格=00,A=01,B=02,C=03,…,Z=26, 则明文数字化HI为08、09;然后把明文M分成等长数据块,块长为s,其中,s尽可能大。
加密和解密(1):常⽤数据加密和解密⽅法汇总数据加密技术是⽹络中最基本的安全技术,主要是通过对⽹络中传输的信息进⾏数据加密来保障其安全性,这是⼀种主动安全防御策略,⽤很⼩的代价即可为信息提供相当⼤的安全保护。
⼀、加密的基本概念"加密",是⼀种限制对⽹络上传输数据的访问权的技术。
原始数据(也称为明⽂,plaintext)被加密设备(硬件或软件)和密钥加密⽽产⽣的经过编码的数据称为密⽂(ciphertext)。
将密⽂还原为原始明⽂的过程称为解密,它是加密的反向处理,但解密者必须利⽤相同类型的加密设备和密钥对密⽂进⾏解密。
加密的基本功能包括:1. 防⽌不速之客查看机密的数据⽂件;2. 防⽌机密数据被泄露或篡改;3. 防⽌特权⽤户(如系统管理员)查看私⼈数据⽂件;4. 使⼊侵者不能轻易地查找⼀个系统的⽂件。
数据加密是确保计算机⽹络安全的⼀种重要机制,虽然由于成本、技术和管理上的复杂性等原因,⽬前尚未在⽹络中普及,但数据加密的确是实现分布式系统和⽹络环境下数据安全的重要⼿段之⼀。
数据加密可在⽹络OSI七层协议(OSI是Open System Interconnect的缩写,意为开放式系统互联。
国际标准组织(国际标准化组织)制定了OSI模型。
这个模型把⽹络通信的⼯作分为7层,分别是物理层、数据链路层、⽹络层、传输层、会话层、表⽰层和应⽤层。
)的多层上实现、所以从加密技术应⽤的逻辑位置看,有三种⽅式:①链路加密:通常把⽹络层以下的加密叫链路加密,主要⽤于保护通信节点间传输的数据,加解密由置于线路上的密码设备实现。
根据传递的数据的同步⽅式⼜可分为同步通信加密和异步通信加密两种,同步通信加密⼜包含字节同步通信加密和位同步通信加密。
②节点加密:是对链路加密的改进。
在协议传输层上进⾏加密,主要是对源节点和⽬标节点之间传输数据进⾏加密保护,与链路加密类似.只是加密算法要结合在依附于节点的加密模件中,克服了链路加密在节点处易遭⾮法存取的缺点。
2013年3月 第34卷第3期
计算机工程与设计
COMPUTER ENGINEERING AND DESIGN Mar.2013
VoL 34 No.3
字符型密码随机加密与解密算法的设计与实现 崔艳荣 (长江大学计算机科学学院,湖北荆州434023) 摘要:为防止网络应用系统中字符型密码被非法用户通过“跑字典”破译,并能为网络用户找回丢失的密码,同时也为 远程访问数据库做数据同步提供便利,提出一种对字符型密码采用线性随机加密与解密的算法。该算法中的加密参数随机 生成,并在密文结构中采用了随机混淆手段,对同一明文可产生不同的密文,且算法可逆。通过JavaScript语言实现了该 算法,验证了该算法的可行性和有效性。 关键词:字符型密码;随机加密参数;随机混淆;加密算法;解密算法 中图法分类号:TP309.7 文献标识号:A 文章编号:1000—7024(2013)03—0826—05
Design and implementation of random encryption and decryption algorithm for character type cipher
CUI Yan-rong (School of Computer Science,Yangtze University,Jingzhou 434023,China) Abstract:In order tO prevent the character type cipher to be deciphered by the illegal users through“run dictionary”in the net— work system,to find the lost password for the network users,and to provide convenience for use to remote access database to make data synchronization,a random linear encryption and decryption algorithm for character type cipher is put forward.The encryption parameters are randomly generated in the algorithm,and random confusion is adopted in the ciphertext structure,SO the same plaintext can produce different ciphertexts,moreover,the algorithm can be reversed.Finally,the algorithm is imple— mented by the JavaScript language,the feasibility and the validity of the algorithm is validated through experimentation. Key words:character type cipher;random encryption parameter;random confusion;encryption algorithm;decryption algorithm
0引 言 1字符型密码加密现状分析 在日益发展的网络应用中,字符型密码的用途越来越 大,例如网络用户的登录密码、股票账户密码、游戏账号 密码等。这些密码如果以明文的方式存在,则很容易被不 法分子获取,从而给网络用户带来不必要的损失。在很多 WEB应用系统中,账户密码都是以密文的形式存在,这些 密码在网络的传输过程中,就算是被不法分子截获,也不 能立即得到相应的明文,从而为网络账户的安全提供了一 定的保障。但是,多数应用系统对密码的加密采用的是不 可逆的方式,用户遗失密码后不能找回;另外,有些系统 中的密文容易被非法用户通过“跑字典”的方式破解,基 于此,提出一种字符型密码随机加密与解密算法,以期解 决以上问题。 密码加密与解密的算法也有很多,例如著名的MD5_1 J 加密算法和RSA[1_加密与解密算法等,其中分为可逆与不 可逆算法,比如MD5加密算法是不可逆的,经MD5加密 后的密文无法还原出原始密码,应用系统只能将用户输入 的原始密码按MD5加密算法运算后所得到的密文与实现经 同样算法所生成的密文进行对比方能验证用户的合法性, 此方法最大的优点是任何人都不可能篡改用户密码,具备 很高的安全性。文献[2一lO]显示,目前的WEB系统中, 对用户密码的加密,更多的是应用MD5进行加密。 采用MD5加密,可以在一定程度上保证用户密码的安 全性,但也有不足之处,主要表现在以下3个方面: (1)MD5是单向加密算法,加密后的信息不能解密,
收稿日期:2012—07—16;修订日期:2012—09—22 基金项目:湖北省自然科学基金项目(2011CDC126);湖北省教育厅科学技术研究计划优秀中青年人才基金项目(Q2O111311) 作者简介:崔艳荣(1968一),女,湖北仙桃人,博士,副教授、硕士生导师,CCF会员,研究方向为计算机网络、信息安全。 E-mail:cyanr@tom.corn 第34卷第3期 崔艳荣:字符型密码随机加密与解密算法的设计与实现 ・827・ 用户丢失密码后只能重置密码,而没有任何方法找回密码。 (2)不同的密码经MD5加密后有可能形成同一密文, 虽然概率极低,但还是可能出错,也就是说用户不用原始 密码而用另一密码也可能成功登录。 (3)也是最关键之处,经MD5加密后的密文由于无法 还原,所以在需要还原原始密码的应用中就不能使用,比 如某些网站为了方便用户下次登陆而设有保存密码的功能, 一般来说使用浏览器的cookie来保存用户ID和登录密码, 以便下次用户登录时系统自动为用户填写用户ID和登录密 码,但利用cookie来保存用户登录密码是不安全的,稍懂 点网络编程的人就可以进入用户的计算机找出相应的cookie 来窃取用户的登录密码。所以利用cookie保存用户登录密 码时需要经过一定的加密处理,并且经加密过的密文可以 由一定的算法还原出原始密码。又比如某些分布式网络应 用系统需要同步数据库的内容,而访问远程数据库就必须 有远程数据库的密码,而这个密码必须保存在本地而且需 要进行加密处理,并且加密后的密文还应该有一定的算法 来还原出原始密码。因此MD5加密算法在一定的场合下不 能满足需求。基于以上的需求,设计出一套新的加密与解 密算法有着重大的意义。 2字符型密码随机加密与解密算法设计 2.1算法设计思想 基于字符型密码随机加密与解密算法的核心功能实质 上就是字符串的加密与解密。设计要求有以下三点:①算 法相对简单,加密与解密运算速度快,消耗机器资源少。 ②在得不到原始算法的基础上进行解密难度很大,无论是 暴力破解还是技术破解都无法在短时间内完成解密,只能 根据加密算法的逆运算才能正确解密。③不担心密文泄露, 破解者即使拿到多套正确的原始密码与加密后的密文也无 法得出加密参数。 2.2加密算法与密钥设计 按以上要求进行算法设计,经本人研究发现,绝大多 数用户密码都是由计算机键盘上的可见字符组成,而计算 机键盘上的可见字符ASC码范围为33到126,本文以最长 8位密码为例进行算法设计和实现。 对于任何一个可见字符,其ASC码的范围为33到 126,其中包括所有的英文字母,数字,标点符号等。反过 来说,对于任何一个在33至126内的数字都对应着一个字 符。因此设计出一个线性加密算法,y—ax+b。其中,y为 加密后的数值,X为原始数值,对应着密码中的某一字符。 a和b是两个随机数。 线性加密参数设计:由线性加密公式y=ax+b和密文 组成原则可知,Y的取值范围为AA到ZZ,换算成十进制 值为0到675,X为原始密码的某一位经ASC转换而来, 所以X的取值范围为33到126,因此得到如下关系:其中 X,Y,a,b皆为正整数 y—ax+b y ̄676 y>0 x<127 x>32 另外为了缩小参数范围,降低计算量,可以增加设定 a>O b>O 由以上关系解得O<a<6 以下用穷举法分别求出对应于不同a值的b的取值 范围 当a一1时,解得O<b<549 当a=2时,解得O<b<423 当a一3时,解得0<b<297 当a=4时,解得0<b ̄171 当a一5时,解得O<b<45 程序设计中a由系统随机生成,范围为O<a<6,上限 是5,下限是1,b的范围用一个一维数组限制其上限, [-549,423,297,171,453分别对应不同a值时的取值范 围,下限是1。 2.3密文结构设计 密文结构设计:密文由32位26进制数组成,用大写 字母A到z表示每一位,其中A到z分别表示十进制的0 到25,原始密码字符串最大长度为8位,每一位经线性加 密后用2个大写字母表示其加密密文,因此完全表示最长 密码只需16位,根据上面分析所得的ab参数范围,设计 用1位表示随机线性加密系数a,1位表示原始密码字符串 实际长度(字符个数),2位表示b,总共用2O位表示完所 有信息,剩下12位作为随机混淆处理位,分别插入前面11 个(22位)信息之间,并在密文首尾各加一位随机值,以 增加破解难度。此外,为了防止大多数用户密码长度相同 (比如大多取8位)时所生成的长度加密位相同,长度位也 用采用加密处理,本例用参数a的十进制值加上实际长度 值所得结果再经26进制转换而成,这样得到的原始密码长 度也是个随机数,即使两个用户密码长度相同但在密文中 对应的长度位也会不同。让破解者找不到任何规律。当原 始密码长度小于8位时,用随机26进制直补齐8位,解密 时根据长度位计算结果舍弃随机补充部分。本例算法采用 如下密文结构: 密文位数 相应位数的值 0: 随机值 1--2: 加密后的线性加密参数b 3: 随机值 4: 加密后的原始字符串文长度 5: 随机值