gpt4 book ai didi

python实现维吉尼亚加密法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 44 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现维吉尼亚加密法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例为大家分享了python实现维吉尼亚加密法的具体代码,供大家参考,具体内容如下 。

vigenere加密/解密时,把英文字母映射为0-25的数字再进行运算,并按n个字母为一组进行变换.算法定义如下: 设密钥 k =(k1,k2,k3…,kn),明文 m = (m1,m2,….mn),则加密算法为: ek(m) = (c1,c2,…cn) 其中:c1 = (mi+ki)(mod 26),i=1,2,3…..n 解密算法为: mi = (ci - ki)(mod 26), i = 1,2,…..n.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import string,os
 
def   vigenereencrypt(msg,key):
     size = len (key)
     result = []
     cnt = 0
     for i in msg:
       if i.upper() in string.uppercase:
         #offset相当于是 ki
         offset = string.uppercase.find(key[cnt % size])
         t = string.uppercase[(string.uppercase.find(i.upper()) + offset) % 26 ] #这里相当于是c1 = (mi+ki)(mod 26) ,t = c1
         if i.isupper():
           result.append(t)
         else :
           result.append(t.lower())
         cnt + = 1
       else :
         result.append(i)
     return "".join(result)
def   main():
 
     msg = "common sense is not so common"
     cipher = vigenereencrypt(msg, "pizza" ) #key = "pizza:
 
     print cipher
if   __name__ = = "__main__" :
     main()

python实现维吉尼亚加密法

小编再为大家分享一段vigenere密码python实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
##########vigenere密码############
 
letter_list = 'abcdefghijklmnopqrstuvwxyz' #字母表
 
#根据输入的key生成key列表
def get_keylist(key):
  key_list = []
  for ch in key:
   key_list.append( ord (ch.upper()) - 65 )
  return key_list
 
#加密函数
def encrypt(plaintext,key_list):
  ciphertext = ""
 
  i = 0
  for ch in plaintext: #遍历明文
   if 0 = = i % len (key_list):
    i = 0
   if ch.isalpha(): #明文是否为字母,如果是,则判断大小写,分别进行加密
    if ch.isupper():
     ciphertext + = letter_list[( ord (ch) - 65 + key_list[i]) % 26 ]
     i + = 1
    else :
     ciphertext + = letter_list[( ord (ch) - 97 + key_list[i]) % 26 ].lower()
     i + = 1
   else : #如果密文不为字母,直接添加到密文字符串里
    ciphertext + = ch
  return ciphertext
 
#解密函数
def decrypt(ciphertext,key):
  plaintext = ""
 
  i = 0
  for ch in ciphertext: #遍历密文
   if 0 = = i % len (key_list):
    i = 0
   if ch.isalpha(): #密文为否为字母,如果是,则判断大小写,分别进行解密
    if ch.isupper():
     plaintext + = letter_list[( ord (ch) - 65 - key_list[i]) % 26 ]
     i + = 1
    else :
     plaintext + = letter_list[( ord (ch) - 97 - key_list[i]) % 26 ].lower()
     i + = 1
   else : #如果密文不为字母,直接添加到明文字符串里
    plaintext + = ch
  return plaintext
 
if __name__ = = '__main__' :
  print ( "加密请按d,解密请按e:" )
  user_input = input ();
  while (user_input! = 'd' and user_input! = 'e' ): #输入合法性判断
   print ( "输入有误!请重新输入:" )
   user_input = input ()
 
  print ( "请输入密钥:" )
  key = input ()
  while (false = = key.isalpha()): #输入合法性判断
   print ( "输入有误!密钥为字母,请重新输入:" )
   key = input ()
 
  key_list = get_keylist(key)
 
  if user_input = = 'd' :
   #加密
   print ( "请输入明文:" )
   plaintext = input ()
   ciphertext = encrypt(plaintext,key_list)
   print ( "密文为:\n%s" % ciphertext)
  else :
   #解密
   print ( "请输入密文:" )
   ciphertext = input ()
   plaintext = decrypt(ciphertext,key_list)
   print ( "明文为:\n%s" % plaintext)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/CosmopolitanMe/article/details/79498403 。

最后此篇关于python实现维吉尼亚加密法的文章就讲到这里了,如果你想了解更多关于python实现维吉尼亚加密法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com