下面我们来介绍著名的凯撒密码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(位移密码算法挑战)相关推荐

  1. 《算法导论》第16章 贪心算法 个人笔记

    第16章 贪心算法 16.1 活动选择问题 问题:假设有一个n个活动的集合S=a1,a2,...,anS={a_1,a_2,...,a_n},这些活动使用同一个资源,而这个资源在某个时刻只能供一个活动 ...

  2. w3cschool算法挑战记录1-11(数组截断算法挑战)

    刚看到这个题,觉得比之前的都简单呀,然后想了一下思路: 1.还是数组切片,上计数器,但只切一次,返回后面的数组即可: 结果一看示例,发现是一个内置函数,其实是为了让我们知道有这个函数的存在,汗: 示例 ...

  3. 密码学:c/c 语言实现 pdf,典型密码算法C语言实现pdf

    典型密码算法C语言实现 内容简介 <典型密码算法C语言实现>详细讲述了一些典型密码算法的算法原理及C语言实现.书中密码算法包括:序列密码.分组密码.公钥密码和Hash算法,其中序列密码有祖 ...

  4. 古典密码算法 凯撒(Caesar)密码,又叫循环移位密码

    古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密.它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密.下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密 ...

  5. 【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9...)

      由于工作的需要,在过去的两年中学习.适配了很多算法,包括对称算法.非对称算法.国密算法.国际算法等.为了逼迫自己能够牢记并掌握这些算法的基本知识点,故本人写了一个关于算法的专栏(持续更新中...) ...

  6. 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...

  7. 古典密码算法实验c语言,2021信息安全 实验一 古典密码算法C语言.docx

    2021信息安全 实验一 古典密码算法C语言.docx 信息安全信息安全 实验一实验一 古典密码算法古典密码算法 C C 语言语言 信息安全实验报告 课程名称 _ 专业计算机科学与技术 _2010_级 ...

  8. 杨元原博士国密课堂 · 第二期 | 商用密码应用安全性评估:Part2. 商用密码算法

    #国密课堂#   第二期 商用密码应用 安全性评估 Part 2. 商用密码算法 在第一期国密课堂 中,杨博士带大家简单了解了密码算法的概念.第二期杨博士带我们继续走近商用密码应用安全性评估领域,进一 ...

  9. 国产商用密码算法简介

    国产商用算法是指中国自主研发并推广应用的商用加密算法.自20世纪90年代起,中国开始对商用密码算法进行研究和开发,经过多年的努力,中国已经拥有了自主研发的商用密码算法体系.本文将探讨国产商用算法的发展 ...

  10. 学习记录575@网络分层下各层密码算法概述

    网络分层协议 互联网通信主要是在TCP/IP通信协议的基础上建立起来的.TCP/IP体系结构共分5层,由上到下分别是应用层.传输层(TCP).网络层(IP).数据链路层和实体层.实体层也称为物理层.使 ...

最新文章

  1. declare handler 声明异常处理的语法
  2. 【译】Introducing scrcpy
  3. C# 通过拼音检索中文名称
  4. HTTP详解(转载)
  5. 透过迷雾不再迷茫 浅析海康威视透雾技术
  6. 使用SparkJava和Graal的本机微服务
  7. dll oem证书导入工具_技术干货 | 恶意代码分析之反射型DLL注入
  8. 医用计算机基础学习心得,计算机基础学习心得.doc
  9. htaccess是什么文件
  10. 图像空域增强:卷积运算法
  11. lighty2.0沙箱版本的协议和配置分析采用ragel 成功案例
  12. OpenGL第八版--初识OpenG
  13. 使用github搭建网站
  14. matlab filter zf,什么是MATLAB函数过滤器中’zf’的内容
  15. Arduino基础项目十三:通过开关控制风扇
  16. python pandas的read_html方法爬取网页表格
  17. 81.(cesium之家)cesium修改灰色背景(默认蓝色)
  18. 安卓项目查手机电量功能_Android手机电池详细信息查看
  19. 拼多多客户差评回复话术
  20. 利用js制作html table分页示例(js实现分页)

热门文章

  1. linux livecd 挂载硬盘,网上的Ubuntu LiveCD硬盘安装方法
  2. 熊猫直播破产背后:王思聪不肯再借钱,谋求卖身腾讯未果
  3. mac修改锁定文件的解决方法
  4. js获取当前日期yyyymmdd
  5. python爬取酷狗音乐源码_python爬虫教程:爬取酷狗音乐
  6. java 读取pdf表格_在Java中使用tabula提取PDF中的表格数据
  7. C#添加 / 创建本地数据库连接
  8. 如何启动Django项目详解
  9. Mysql环境变量的配置(详细图解)
  10. 前端知识点——Web Sockets