w3cschool算法挑战记录1-16(位移密码算法挑战)
下面我们来介绍著名的凯撒密码Caesar cipher
,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
分析,这是个密码学的经典场景,一看就是利用字母的unicode码增减实现的,在unicode码中
A~Z :65~90,a~z :97~122,0~9 : 48~57,因此通过unicode码的计算就可以实现密码变换
这里需要用到两个个函数,分别是:
charCodeAt(),将为转换成UNICODE码,如'ABC'.charCodeAt(0) // returns 65
string.fromCharCode(),将UNICODE码转换为文字,如 String.fromCharCode(65, 66, 67); // returns "ABC"
示例程序:
function rot13(str){ // LBH QVQ VG!
function rot13char(char){
if (char.charCodeAt()>=65&&char.charCodeAt()<=90){
return char.charCodeAt()>=78?String.fromCharCode(char.charCodeAt()-13):String.fromCharCode(char.charCodeAt()+13);
}else{
return char;
}
}
str=str.split("").map(rot13char).join("");
return str;
}
// Change the inputs below to test
rot13("SERR PBQR PNZC");
分析如下:
1、通过函数嵌套实现两个功能,分别是函数的切片和重组,unicode码的转换和变化;代码写的很精简
2、str=str.split("").map(rot13char).join(""); 一行代码实现了先切片后重组的全过程,我试着分析一下:
i、先执行str.split(""),字符串切片;
ii、切片完成的数组通过map函数,实现数组的重新组合()并通过join实现了无缝拼合;
iii、map的函数通过调用变量末实现了unicode的自增;
3、rot13char函数,使用了if语句判断是否为英文,65~90,如果不在这个区间则直接返回,在区间的数+13,如果unicode值大于78则为-13,实现了英文字母的轮询;
i、这里面用到了js的三元表达式,对于unicode值大于78的数字进行判断
整个代码写的很巧妙,也很精简,值得学习。
w3cschool算法挑战记录1-16(位移密码算法挑战)相关推荐
- 《算法导论》第16章 贪心算法 个人笔记
第16章 贪心算法 16.1 活动选择问题 问题:假设有一个n个活动的集合S=a1,a2,...,anS={a_1,a_2,...,a_n},这些活动使用同一个资源,而这个资源在某个时刻只能供一个活动 ...
- w3cschool算法挑战记录1-11(数组截断算法挑战)
刚看到这个题,觉得比之前的都简单呀,然后想了一下思路: 1.还是数组切片,上计数器,但只切一次,返回后面的数组即可: 结果一看示例,发现是一个内置函数,其实是为了让我们知道有这个函数的存在,汗: 示例 ...
- 密码学:c/c 语言实现 pdf,典型密码算法C语言实现pdf
典型密码算法C语言实现 内容简介 <典型密码算法C语言实现>详细讲述了一些典型密码算法的算法原理及C语言实现.书中密码算法包括:序列密码.分组密码.公钥密码和Hash算法,其中序列密码有祖 ...
- 古典密码算法 凯撒(Caesar)密码,又叫循环移位密码
古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密.它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密.下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密 ...
- 【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9...)
由于工作的需要,在过去的两年中学习.适配了很多算法,包括对称算法.非对称算法.国密算法.国际算法等.为了逼迫自己能够牢记并掌握这些算法的基本知识点,故本人写了一个关于算法的专栏(持续更新中...) ...
- 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc
您所在位置:网站首页 > 海量文档  > 高等教育 > 实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...
- 古典密码算法实验c语言,2021信息安全 实验一 古典密码算法C语言.docx
2021信息安全 实验一 古典密码算法C语言.docx 信息安全信息安全 实验一实验一 古典密码算法古典密码算法 C C 语言语言 信息安全实验报告 课程名称 _ 专业计算机科学与技术 _2010_级 ...
- 杨元原博士国密课堂 · 第二期 | 商用密码应用安全性评估:Part2. 商用密码算法
#国密课堂# 第二期 商用密码应用 安全性评估 Part 2. 商用密码算法 在第一期国密课堂 中,杨博士带大家简单了解了密码算法的概念.第二期杨博士带我们继续走近商用密码应用安全性评估领域,进一 ...
- 国产商用密码算法简介
国产商用算法是指中国自主研发并推广应用的商用加密算法.自20世纪90年代起,中国开始对商用密码算法进行研究和开发,经过多年的努力,中国已经拥有了自主研发的商用密码算法体系.本文将探讨国产商用算法的发展 ...
- 学习记录575@网络分层下各层密码算法概述
网络分层协议 互联网通信主要是在TCP/IP通信协议的基础上建立起来的.TCP/IP体系结构共分5层,由上到下分别是应用层.传输层(TCP).网络层(IP).数据链路层和实体层.实体层也称为物理层.使 ...
最新文章
- declare handler 声明异常处理的语法
- 【译】Introducing scrcpy
- C# 通过拼音检索中文名称
- HTTP详解(转载)
- 透过迷雾不再迷茫 浅析海康威视透雾技术
- 使用SparkJava和Graal的本机微服务
- dll oem证书导入工具_技术干货 | 恶意代码分析之反射型DLL注入
- 医用计算机基础学习心得,计算机基础学习心得.doc
- htaccess是什么文件
- 图像空域增强:卷积运算法
- lighty2.0沙箱版本的协议和配置分析采用ragel 成功案例
- OpenGL第八版--初识OpenG
- 使用github搭建网站
- matlab filter zf,什么是MATLAB函数过滤器中’zf’的内容
- Arduino基础项目十三:通过开关控制风扇
- python pandas的read_html方法爬取网页表格
- 81.(cesium之家)cesium修改灰色背景(默认蓝色)
- 安卓项目查手机电量功能_Android手机电池详细信息查看
- 拼多多客户差评回复话术
- 利用js制作html table分页示例(js实现分页)