使用js实现5种加密解密算法(凯撒密码、字母倒排序、单表置换、维基利亚、转换加密算法
在学习操作系统的时候,我们会学到系统安全的章节,而在这一块会有关于加密解密算法的学习。
一共有5种常见的加密解密算法:凯撒密码、字母倒排序、单表置换、维基利亚、转换加密算法。
我使用了js实现了这5种算法,而且做了可视化处理、输入输出格式化处理,使得操作起来非常方便,下面是实现后整体的效果:
1.这里是源代码下载地址(Github):
基于js的5种加密解密算法实现
2.五种加密解密算法的基本原理
①单字母替换加密方法——恺撒密码
加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文。
②单字母替换加密方法——字母倒排序
在加密、解密的过程中明文和密文按照字母表的顺序倒排对应,即A对应Z,B对应Y。
③单字母替换加密方法——单表置换密码
由密钥Key构造字符置换表,完成加密和解密过程。
④多字母替换加密方法——维吉利亚密码
假设明文m=m1 m2 m3 … mn;密钥k=k1k2 k3 … kn,对应密文c=c1 c2 c3 … cn,密文为:ci=(mi+ki )mod 26 ,26个字母的序号依次为0~25,ci , mi ,,ki是分别是密文明文密钥中第i个字母的序号。
⑤转换加密方法
通过将明文每m个字符一组按顺序分为若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。或者通过给出一个密钥字符串,将明文按密钥字符串长度按顺序分为若干组字符串,再按照密钥字符串各个字符的顺序形成密文,并分析给出解密的方法。
3.基础功能设计
①清空功能:
②加密解密单选设计:
③菜单设置:
④消息提醒设置:
4.测试过程
(一)凯撒密码
①加密实验
输入数据:
Input:ABCDEFGH
Num:4
输出数据:
Output:EFGHIJKL
②解密实验
输入数据:
Input:EFGHIJKL
Num:4
输出数据:
Output:ABCDEFGH
(二)字母倒排序
①加密实验
输入数据:
Input:important
输出数据:
Output:rnkligzmg
②解密实验
输入数据:
Input:rnkligzmg
输出数据:
Output:important
(三)单表置换
①加密实验
输入数据:
Input:important
key:BEIJINGTSINGHUA(北京清华)
输出数据:
Output:HDLKOQBFQ
②解密实验
输入数据:
Input:HDLKOQBFQ
key:BEIJINGTSINGHUA(北京清华)
输出数据:
Output:important
(四)维基利亚
①加密实验
输入数据:
Input:information
key:STAR
输出数据:
Output:AGFFJFAKAHN
②解密实验
输入数据:
Input:AGFFJFAKAHN
key:STAR
输出数据:
Output:information
(五)转换加密(1)
①加密实验
输入数据:
Input:it can allow students to get close up views
Num:5
输出数据:
Output:iasngovtlttesiclusteeaodtcuwnweolps
②解密实验
输入数据:
Input:iasngovtlttesiclusteeaodtcuwnweolps
Num:5
输出数据:
Output:itcanallowstudentstogetcloseupviews
(六)转换加密(2)
①加密实验
输入数据:
Input:wu han university of technology
Key:MISXTONG
输出数据:
Output:IOL*UETGWVFONYO*UTN*HREYNIH*ASC*
②解密实验
输入数据:
Input:IOL*UETGWVFONYO*UTN*HREYNIH*ASC*
输出数据:
Output:wuhanuniversityoftechnology
5.注意事项
(一).本项目为了增加可操作性、增加视图画面感、进行输入输出验证,使用了Vue.js中数据绑定的功能以及Element UI插件
(二).主体代码都在code_index.html中,代码总量600余行。进行了详细地标注
(三).在转化加密的实现过程中会有一个不可避免的BUG,那就是当以相应的栅栏间隔对字符串进行分割形成相应二维数组的时候,由于其先行后列进行排序,再先列后行进行排序,所以如果二维数组尾部出现空字符,则在这个变化的过程中会无故丢失数据的结构,导致排序的错乱。
我想到了两种解决方法:
①通过限时用户的输入格式,使得最终形成的二维数组不会有空字符存在,这样也就避免了相应的数据丢失,如下图所示:
②通过在先行后列和先列后行的排序中对于空字符进行识别,替换成一个特殊字符,以弥补数据结构的缺失,本实验中采用的是“*”这一特殊字符,如下图所示:
————————————————
版权声明:本文为CSDN博主「AlexGeek」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41000891/article/details/83511841
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2020-08-31 HTML禁止右键 选择
2019-08-31 利用ARouter实现组件间通信,解决子模块调用主模块问题
2017-08-31 Android中的Handler的机制与用法详解
2017-08-31 在Android开发中,定时执行任务的3种实现方法