使用 Go 语言实现凯撒加密

栏目: IT技术 · 发布时间: 4年前

内容简介:在 2 世纪, 发送机密消息的一个有效方法就是对每个字母进行位移, 使得L fdph, L vdz, L frqtxhuhg. —— 尤利乌斯·凯撒(Julius Caesar)正如代码清单 9-6 所示, 使用计算机以数值方式处理字符是非常容易的。

在 2 世纪, 发送机密消息的一个有效方法就是对每个字母进行位移, 使得 'a' 变为 'd''b' 变为 'e' , 依次类推。 这样处理产生的结果看上去就像是一门外语:

L fdph, L vdz, L frqtxhuhg. —— 尤利乌斯·凯撒(Julius Caesar)

正如代码清单 9-6 所示, 使用计算机以数值方式处理字符是非常容易的。

使用  <a href='https://www.codercto.com/topics/6127.html'>Go</a>  语言实现凯撒加密

代码清单 9-6 处理单个字符: caesar.go

c := 'a'
c=c+3
fmt.Printf("%c", c)    // 打印出“d”

然而, 代码清单 9-6 展示的方法并不完美, 因为它没有考虑该如何处理字符 'x''y''z' , 所以它无法对 xylophonesyakszebras 这样的单词实施加密。 为了解决这个问题, 最初的凯撒加密法采取了回绕措施, 也就是将 'x' 变为 'a''y' 变为 'b' , 而 'z' 则变为 'c' 。 对于包含 26 个字符的英文字母表, 我们可以通过这段代码实现上述变换:

if c > 'z' {
    c = c - 26
}

凯撒密码的解密方法跟加密方法正好相反, 程序不再是为字符加上 3 而是减去 3 , 并且它还需要在字符过小也就是 c < 'a' 的时候, 将字符加上 26 以实施回绕。 虽然上述的加密方法和解密方法都非常直观, 但由于它们都需要处理字符边界以实现回绕, 因此实际的编码过程将变得相当痛苦。

回转13(rotate 13,简称ROT13)是凯撒密码在 20 世纪的一个变体, 该变体跟凯撒密码的唯一区别就在于, 它给字符添加的量是 13 而不是 3 , 并且 ROT13 的加密和解密可以通过同一个方法实现, 这是非常方便的。

现在, 假设搜寻外星智能(Search for Extra-terrestrial Intelligence, SETI)的相关机构在外太空扫描外星人通信信息的时候, 发现了包含以下消息的广播:

message := "uv vagreangvbany fcnpr fgngvba"

我们有预感, 这条消息很可能是使用 ROT13 加密的英文文本, 但是在解密这条消息之前, 我们还需要知悉其包含的字符数量, 这条消息包含 30 个字符, 可以通过内置的 len 函数来确定:

fmt.Println(len(message))    // 打印出“30”

注意 Go 拥有少量无须导入语句即可使用的内置函数, len 函数即是其中之一, 它可以测定各种不同类型的值的长度。 例如, 在上面的代码中, len 返回的就是 string 类型的字节长度。 代码清单 9-7 展示的就是外太空消息的解密程序, 你只需要在 Go Playground 运行这段代码, 就会知道外星人在说什么了。

代码清单 9-7 ROT13 消息解密: rot13.go

message := "uv vagreangvbany fcnpr fgngvba"

for i := 0; i < len(message); i++ {    // 迭代字符串中的每一个 ASCII 字符
    c := message[i]
    if c >= 'a' && c <= 'z' {    // 只解密英文字母,至于空格和标点符号则保持不变
        c = c + 13
        if c > 'z' {
            c = c - 26
        }
    }
    fmt.Printf("%c", c)
}

注意, 这段代码中的 ROT13 实现只能处理 ASCII 字符(字节), 它无法处理用西班牙语或者俄语撰写的消息, 不过接下来的一节将会给出这个问题的解决方案。

Note

本文摘录自《Go语言趣学指南》第 9 章, 你可以通过访问 gpwgcn.com 来获得该书的更多信息。

使用 Go 语言实现凯撒加密

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能

人工智能

Stuart J. Russell、Peter Norvig / 清华大学出版社 / 2011-7 / 158.00元

《人工智能:一种现代的方法(第3版)(影印版)》最权威、最经典的人工智能教材,已被全世界100多个国家的1200多所大学用作教材。《人工智能:一种现代的方法(第3版)(影印版)》的最新版全面而系统地介绍了人工智能的理论和实践,阐述了人工智能领域的核心内容,并深入介绍了各个主要的研究方向。全书仍分为八大部分:第一部分“人工智能”,第二部分“问题求解”,第三部分“知识与推理”,第四部分“规划”,第五部......一起来看看 《人工智能》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具