日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3.1.2 vernam 代数密码

發布時間:2025/6/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.1.2 vernam 代数密码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

vernam 代數密碼

簡介

Vernam加密法也稱一次一密(One-Time-Pad),用隨機的非重復的字符集合作為輸出密文.這里最重要的是,一旦使用了變換的輸入密文,就不再在任何其他消息中使用這個輸入密文(因此是一次性的).輸入密文的長度等于原消息明文的長度.

一次性板稱為密鑰(Key),并且明文有多長,密鑰就有多長,因此對于大消息行不通

公式

步驟編輯
以下是主要步驟.
1.按遞增順序把每個明文字母作為一個數字,A=0,B=1等等.
2.對輸入明文中每一個字母做相同的處理.
3.將明文中的每個字母與密鑰中的相應字母相加.
4.如果得到的和大于26,則從中減去26.
5.將和轉化為字母,從而得到密文.

例子

假設對明文消息HOW ARE YOU進行Verman加密,一次性板為NCBTZQARX得到的密文消息UQXTUYFR.以下是圖解

  • 明文 H O W A R E Y O U
    7 14 22 0 17 4 24 14 20

  • 密鑰 N C B T Z Q A R X
    13 2 1 19 25 16 0 17 23

  • 初始和 20 16 23 19 42 20 24 31 43

  • 大于25則減去26

  • 20 16 23 19 16 20 24 5 17

  • 密文 U Q X T Q U Y F R
  • 代碼

    package mainimport ("fmt" )func sanitize(in string) string {out := []rune{}for _, v := range in {if 65 <= v && v <= 90 { //A-Zout = append(out, v)} else if 97 <= v && v <= 122 { //a-zout = append(out, v-32) //小寫轉為大寫}}return string(out) }func encipher(msg,key string) string{if len(msg) != len(key){fmt.Println("vernam 加密需要明文密鑰長度一樣")return ""}smsg ,skey := sanitize(msg) ,sanitize(key) //轉為大寫out := make([]rune, 0, len(msg))for i,v := range smsg {a := (v - 'A') + (rune(skey[i]) - 'A')if a > 25 {a = a - 26}a = a + 'A'out = append(out,a)}fmt.Println(string(out))return ""}func main() {encipher("HOWAREYOU","NCBTZQARX")encipher("abcdefg","gfedcba") } 復制代碼

    轉載于:https://juejin.im/post/5b36e5716fb9a00e8761b4cc

    總結

    以上是生活随笔為你收集整理的3.1.2 vernam 代数密码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。