Golang 實現凱撒密碼
摘要:
一.凱撒密碼加密程式碼思路
基本思路:
設定明文 和 位移步長(祕鑰)
將明文轉成小寫,準備 明文位元組切片 與 密文切片
迴圈將每個明文字元 按照 位移步長 做位移,存入密文切片
返回密文
匯入包
...
一.凱撒密碼加密程式碼思路
基本思路:
- 設定明文 和 位移步長(祕鑰)
- 將明文轉成小寫,準備 明文位元組切片 與 密文切片
- 迴圈將每個明文字元 按照 位移步長 做位移,存入密文切片
- 返回密文
- 匯入包
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) }