Golang 实现凯撒密码
一.凯撒密码加密代码思路
基本思路:
- 设置明文 和 位移步长(秘钥)
- 将明文转成小写,准备 明文字节切片 与 密文切片
- 循环将每个明文字符 按照 位移步长 做位移,存入密文切片
- 返回密文
- 导入包
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) }
相关推荐
zndy0 2020-11-03
码墨 2020-02-17
SuperYPC 2020-02-14
tydldd 2020-01-17
sunnyJam 2019-12-12
歆萌 2019-11-03
周游列国之仕子 2019-11-03
Joymine 2019-10-25
yangkunlun 2019-09-28
tydldd 2019-09-08
刘阳龙Herman 2019-09-02
onesuperdoer 2019-08-16
MarkArch 2019-06-30
手把手教你学安卓 2019-06-30
jaminliu0 2019-06-30
TammyJi 2019-04-02
tmj 2019-06-28