首页 > 编程语言 >使用js实现5种加密解密算法(凯撒密码、字母倒排序、单表置换、维基利亚、转换加密算法

使用js实现5种加密解密算法(凯撒密码、字母倒排序、单表置换、维基利亚、转换加密算法

时间:2022-08-31 09:22:42浏览次数:95  
标签:加密 解密 js 单表 Output Input 输入 数据 加密算法

在学习操作系统的时候,我们会学到系统安全的章节,而在这一块会有关于加密解密算法的学习。

一共有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

标签:加密,解密,js,单表,Output,Input,输入,数据,加密算法
From: https://www.cnblogs.com/Im-Victor/p/16641796.html

相关文章

  • 什么是 Node.js?
    什么是Node.js?Node.js是一个开源、跨平台的后端JavaScript运行环境,运行在V8引擎上,并在Web浏览器之外执行JavaScript代码,旨在构建可扩展的网络应用程序。关键......
  • NodeJS 网关 — 第 2 部分:设置我们的数据库 (MongoDB)
    NodeJS网关—第2部分:设置我们的数据库(MongoDB)Photoby鲁拜图尔·阿扎德on不飞溅NoSQL数据库使您可以轻松地开始使用基本模式开发项目或应用程序,并且由于......
  • 说一说JS数据类型有哪些,区别是什么?
    JS数据类型分为两类:一类是基本数据类型,也叫简单数据类型,包含7种类型,分别是Number、String、Boolean、BigInt、Symbol、Null、Undefined。另一类是引用数据类型也叫复杂数......
  • JSON.parse(JSON.stringify()) 实现对对象的深拷贝
    JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了就是利用JSON.stringify将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作......
  • Java-JSP(1)
    JSP1.jsp原理jsp全称JavaServerPages,是一种动态网页技术,JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。jsp文件在最后会......
  • React报错之Property does not exist on type 'JSX.IntrinsicElements'
    正文从这开始~总览当组件名称以小写字母开头时,会导致"Propertydoesnotexistontype'JSX.IntrinsicElements'"错误。为了解决该错误,确保组件名称总是以大写字母开头,......
  • d3.js 分页加载
    当数据量过大时,使用d3.js渲染各种图时,如果一下子加载出来,会出现加载过慢,这样使用效果就不是太好,为了解决这个问题,使用了分页加载数据并渐进渲染各种图。一、数据格式......
  • turn.js书本翻页效果插件
     可以制作软纸页或者硬纸页的翻页动画,可设置双页或单页展示。 CDN地址:CDN-turn.js(baomitu.com)官网:Turn.js:ThepageflipeffectinHTML5(turnjs.com)官方......
  • js三级联动
    <divclass="container"><selectname=""id="hero"><optionvalue="">-请选择-</option></select><selectname=""id="skin"......
  • JS面试题一
    1、所有对象都有原型吗?并不是所有对象都有原型;比如使用Object.create()创建一个对象,我们传递一个参数,那么创建的对象的原型则会指向传递的那个对象;而不传参数,也就是创......