Golang 實現凱撒密碼

一.凱撒密碼加密代碼思路

基本思路:

  1. 設置明文 和 位移步長(祕鑰)
  2. 將明文轉成小寫,準備 明文字節切片 與 密文切片
  3. 循環將每個明文字符 按照 位移步長 做位移,存入密文切片
  4. 返回密文

凱撒密碼加密位移

  • 導入包
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)
}

二.凱撒密碼解密代碼思路

基本思路:

  1. 設置密文 和 位移步長
  2. 準備 密文字符切片 與 明文字符切片
  3. 循環將每個 密文字符 按照位移步長 做位移,存入明文切片
  4. 返回明文

凱撒密碼解密位移

  • 凱撒密碼解密代碼
//二、凱撒密碼解密
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)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章