您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    运用 Go 言语完成凯撒加密
    时间:2020-08-12 12:09 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    在 2 世纪, 发送秘密音讯的一个有效办法就是对每个字母停止位移, 使得 'a' 变为 'd' , 'b' 变为 'e' , 依次类推。 这样处置产生的结果看上去就像是一门外语:

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

    正如代码清单 9-6 所示, 运用计算机以数值方式处置字符是十分容易的。

    运用 Go 言语完成凯撒加密

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

    c := 'a' 

    c=c+3 

    fmt.Printf("%c", c)    // 打印出“d” 

    但是, 代码清单 9-6 展现的办法并不完美, 由于它没有思索该如何处置字符 'x' 、 'y' 和 'z' , 所以它无法对 xylophones 、 yaks 和 zebras 这样的单词实施加密。 为了处置这个成绩, 最后的凯撒加密法采取了缭绕措施, 也就是将 '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 字符(字节), 它无法处置用西班牙语或许俄语撰写的音讯, 不过接上去的一节将会给出这个成绩的处置方案。

    【编辑引荐】

    低代码平台会让顺序员失业?测评了5个工具,谁能让效率提高N倍?

    编写更繁复的Python代码的5个技巧

    公司差点由于代码写得差把我直接给开掉

    几行代码即可高效创立数据集,谷歌开源 TFRecorder

    提高GIT中代码质量的七点优秀实际

    (责任编辑:admin)