一. 凯撒密码加密代码思路
基本思路:
设置明文 和 位移步长 (秘钥)
将明文转成小写,准备 明文字节切片 与 密文切片
循环将每个明文字符 按照 位移步长 做位移,存入密文切片
返回密文
导入包
import (
“fmt”
“strings” // 包含字符串操作相关方法
)
凯撒密码加密代码
// 一、凯撒密码加密
func caesarEn(strRaw string, step byte) string {
//1. 明文 转成 小写
str_raw := strings.ToLower(strRaw)
//2. 位移步长
step_move := step
//3. 将字符串 转为 明文字符切片
str_slice_src := []byte(str_raw)
fmt.Println(“ 明文字符切片:”, str_slice_src)
//4. 创建 密文字符切片
str_slice_dst := str_slice_src
//5. 循环明文切片
for i := 0; i < len(str_slice_src); i++ {
//6. 如果当前循环的明文字符 在位移 范围内,则直接 加上 位移步长 存入 密文字符切片
if str_slice_src[i] < 123-step_move {
str_slice_dst[i] = str_slice_src[i] + step_move
} else {//7. 如果 明文字符 超出 范围,则 位移后 步长再减去 26
str_slice_dst[i] = str_slice_src[i] + step_move – 26
}
}
//8. 输出结果
fmt.Println(“ 加密结果为:”, step_move, str_slice_dst, string(str_slice_dst))
return string(str_slice_dst)
}
二. 凯撒密码解密代码思路
基本思路:
设置密文 和 位移步长
准备 密文字符切片 与 明文字符切片
循环将每个 密文字符 按照位移步长 做位移,存入明文切片
返回明文
凯撒密码解密代码
// 二、凯撒密码解密
func caesarDe(strCipher string, step byte) string {
//1. 明文 转成 小写
str_cipher := strings.ToLower(strCipher)
//2. 位移步长
step_move := step
//3. 将字符串 转为 明文字符切片
str_slice_src := []byte(str_cipher)
fmt.Println(“ 密文字符切片:”, str_slice_src)
//4. 创建 密文字符切片
str_slice_dst := str_slice_src
//5. 循环明文切片
for i := 0; i < len(str_slice_src); i++ {
//6. 如果当前循环的明文字符 在位移 范围内,则直接 加上 位移步长 存入 密文字符切片
if str_slice_src[i] >= 97+step_move {
str_slice_dst[i] = str_slice_src[i] – step_move
} else {//7. 如果 明文字符 超出 范围,则 位移后 步长再减去 26
str_slice_dst[i] = str_slice_src[i] + 26 – step_move
}
}
//8. 输出结果
fmt.Println(“ 解密结果为:”, step_move, str_slice_dst, string(str_slice_dst))
return string(str_slice_dst)
}