Golang 實現維吉尼亞加密演算法

2021-10-12 12:51:45 字數 2227 閱讀 5098

維吉尼亞加密演算法:

維吉尼亞加密演算法(virginia encryption algorithm),是凱撒加密演算法的變種:

假設 a=0,b=1…z=25,在凱撒加密演算法中金鑰只有一位,若金鑰是 d 對應3,則所有字元都向後移動3位;維吉尼亞演算法的金鑰不只一位,一般是乙個大寫的單詞,如以golang這個單詞作為金鑰,如此假設設a=0則:

g=6 o=14 l=11 a=0 n=13。

本人正在學習go語言,現利用所學的golang基礎知識實現維吉尼亞演算法,鞏固以下知識點:

型別轉換

切片操作

分支、迴圈語句

運算子:四則運算、模運算、比較、邏輯運算及+=-=++fmt.sprintf()另一種常用字串拼接方法

函式定義:引數(多引數)、返回值(兩種返回方式)

**如下:

// key2value 計算金鑰中每個字母對應數值

// 引數:keyword 金鑰

// start 加密設定起始數值

// 返回:keynum int32 金鑰對應數值切片

func

key2value

(keyword string

, start int)[

]int32}}

return keynum

}

// insertspace 根據資訊空格位置插入空格

func

insertspace

(msg string

, msgslice [

]string

, slicelength int

)(message string)}

message += temp

}return message

}

// virginiaencode 維吉尼亞加密演算法 - 加密函式

// 引數:msg 需要加密明文

// keyword 金鑰

// start start 加密設定起始數值,如a=0 或 a=5

// 返回:message string 加密後的密文

func

virginiaencode

(msg, keyword string

, start int

)(message string)}

message += fmt.

sprintf

("%s"

,string

(c))

}// 若多於乙個單詞,呼叫 insertspace 函式插入空格

if lengthmsg >

1return

}

// virginiadecode 維吉尼亞加密演算法 - 解密函式

// 引數:msg 需要加密明文

// keyword 金鑰,

// start start 加密設定起始數值必須與加密時設定一致

// 返回:message string 解密後的密文

func

virginiadecode

(msg, keyword string

, start int

)(message string)}

message += fmt.

sprintf

("%s"

,string

(c))

}if lengthmsg >

1return

}

func

main()

輸出:

eayxadlzeqsyrihtyclf

thisisagolangprogram

iqtk bb uezb puc!

nice to meet you!

聽朋友的,學了python再來學golang。初學者一枚,路過的大佬請多指教!!!

維吉尼亞加密演算法

這個演算法思想就是 當我們隨機輸入的要加密的一串明文,隨機生成乙個key,然後將對應的明文移動key位。最後得到加密後的密文。例如 hello 隨機生成key架設是 2 3 4 1 0 那麼得到的密文就是 jhpko 這裡的key可正可負。本程式通過srand 和time 函式來生成偽隨機數模擬ke...

維吉尼亞密碼的加密解密

coding utf 8 def weijiniya jiemi ciphertext,key ascii abcdefghijklmnopqrstuvwxyz keylen len key ctlen len ciphertext plaintext i 0 while i ctlen j i k...

古典密碼 python實現維吉尼亞密碼

def secret 加密過程 str input 請輸入明文 str list list str k list x for x in input 請輸入金鑰流 split 輸入金鑰流,以空格為間隔 print k list for i in range len str list 判斷輸入金鑰為數字...