維吉尼亞加密演算法:維吉尼亞加密演算法(
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 判斷輸入金鑰為數字...