资讯专栏INFORMATION COLUMN

Golang 实现凯撒密码

el09xccxy / 3496人阅读

摘要:一凯撒密码加密代码思路基本思路设置明文和位移步长秘钥将明文转成小写,准备明文字节切片与密文切片循环将每个明文字符按照位移步长做位移,存入密文切片返回密文导入包包含字符串操作相关方法凯撒密码加密代码一凯撒密码加密将明文转成小写将明文字符串转成

一.凯撒密码加密代码思路

基本思路:

设置明文 和 位移步长(秘钥)

将明文转成小写,准备 明文字节切片 与 密文切片

循环将每个明文字符 按照 位移步长 做位移,存入密文切片

返回密文

导入包

import (
    "fmt"
    "strings" // 包含字符串操作相关方法
)

凯撒密码加密代码

//一、凯撒密码加密
func caesarEn(strRaw string, step byte) string {
    //1.将明文转成小写
    strRaw = strings.ToLower(strRaw)
    //2.将 明文字符串 转成 明文切片(( 内部 存放的 是 ACSII码 ))
    str_slice_src := []byte(strRaw)
    //3.创建密文切片对象
    str_slice_dst := make([]byte, len(str_slice_src), len(str_slice_src))
    //4.循环明文切片,将 ASCII码 + step位移值后 存入 密文切片
    for i := 0; i < len(str_slice_src); i++ {
        //5.判断 明文字符的ASCII码 位移后 是否有超过 小写字母的范围,如果没有,则直接使用,如果有超过,则需要 -26
        if str_slice_src[i] < 123-step {
            //直接加上 位移步长
            str_slice_dst[i] = str_slice_src[i] + step
        } else {
            str_slice_dst[i] = str_slice_src[i] + step - 26
        }
    }
    fmt.Println("明文:", strRaw, str_slice_src)
    fmt.Println("密文:", string(str_slice_dst), str_slice_dst)
}
二.凯撒密码解密代码思路

基本思路:

设置密文 和 位移步长

准备 密文字符切片 与 明文字符切片

循环将每个 密文字符 按照位移步长 做位移,存入明文切片

返回明文

凯撒密码解密代码

//二、凯撒密码解密
func caesarDe(strCipher string, step_move byte) string {
    //1.密文 转成 小写
    str_cipher := strings.ToLower(strCipher)
    //2.将字符串 转为 密文字符切片
    str_slice_src := []byte(str_cipher)

    //3. 创建 明文字符切片
    str_slice_dst := make([]byte, len(str_slice_src), len(str_slice_src))

    //4.循环密文切片
    for i := 0; i < len(str_slice_src); i++ {
        //5.如果当前循环的 密文字符 在位移 范围内,则直接 减去 位移步长 存入 明文字符切片
        if str_slice_src[i] >= 97+step_move {
            str_slice_dst[i] = str_slice_src[i] - step_move
        } else { //6.如果 密文字符 超出 范围,则 加上 26 后,再向左位移
            str_slice_dst[i] = str_slice_src[i] + 26 - step_move
        }
    }
    //7.输出结果
    fmt.Println("密文:", strCipher, str_slice_src)
    fmt.Println("明文:", string(str_slice_dst), str_slice_dst)
    return string(str_slice_dst)
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24569.html

相关文章

  • 16道初级脚本算法,你要挑战一下吗?

    摘要:设置首字母大写算法挑战返回一个字符串确保字符串的每个单词首字母都大写,其余部分小写。确认末尾字符算法检查一个字符串是否以指定的字符串结尾。删除数组中特定值算法挑战删除数组中的所有的假值。 在w3cschool上看到了这些初级算法题目,自己先尝试做了一下,不会的也会查看一下别人的借鉴一下思路,更多的帮助自己熟悉字符串和数组方法的应用.如果您有更好的解法,可以指出来还有中级算法题目和后面的...

    kumfo 评论0 收藏0
  • CTF编码全家桶小程序

    摘要:编码全家桶小程序提供实体莫尔斯电码等编码转换工具,凯撒密码栅栏密码等加密工具,及地址查询信息查询等工具。 CTF编码全家桶小程序提供Base64、Url、HTML实体、莫尔斯电码等编码转换工具,凯撒密码、栅栏密码、ROT13、MD5、SHA等加密工具,及IP地址查询、Whois信息查询等工具。showImg(https://segmentfault.com/img/bVbiudU?w=...

    zlyBear 评论0 收藏0
  • Github标星2w+,热榜第一,如何用Python实现所有算法

    摘要:归并排序归并排序,或,是创建在归并操作上的一种有效的排序算法,效率为大符号。以此类推,直到所有元素均排序完毕。与快速排序一样都由托尼霍尔提出的,因而也被称为霍尔选择算法。 showImg(https://segmentfault.com/img/remote/1460000019096360);编译:周素云、蒋宝尚 学会了Python基础知识,想进阶一下,那就来点算法吧!毕竟编程语言只...

    zxhaaa 评论0 收藏0
  • Crypto的第一步

    摘要:嘛,既然开始学密码了,就还是记录一下自己的学习历程,这样也会有意思一些,希望自己能够做到一周写两次自己的学习进度吧,今天先来第一步什么叫密码学哦。 嘛,既然开始学密码了,就还是记录一下自己的学习历程,这样也会有意思一些,希望自己能够做到一周写两次自己的学习进度吧,今天先来第一步:什么叫密码学哦。 最近和教授讨论研究的方向,很烦,因为我才刚刚入学,信息安全方面的论文要说完整读下来的基本还...

    source 评论0 收藏0

发表评论

0条评论

el09xccxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<