维吉尼亚密码(Vigenere)

简介: 维吉尼亚密码(Vigenere)

维吉尼亚密码(Vigenere)

  • 加密对象: 字母
  • 原理:
  • 该密码类似于凯撒密码,是一种多表密码。
  • 秘钥是字母组成的字符串,长度是1到明文长度。
  • 加密时,将秘钥补全成明文长度,例如明文是12,而输入的秘钥是linux, 所以补全后是linuxlinuxli。
  • 查表:取第一个明文字符作为横标,取第一个秘钥(上一步构成的秘钥)字符作为纵标,查找对应字符,在去第二个明文字符作为横标,取第二个秘钥字符作为纵标,查找对应字符,…。最后将所有字符合在一起就构成了密文
坐标 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M


O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V


















X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

  • 代码
# write by 2021/7/12
# 维吉尼亚密码
DIC = "abcdefghijklmnopqrstuvwxyz"
def judge_key(key):
    if not key:
        return 0
    for i in key:
        if i not in DIC:
            return 0
    return 1
def encrypt_vigenere(string, key):
    if not judge_key(key):
        return -1
    ciphertext = ""
    key_index = 0
    key_len = len(key)
    for i in string:
        if i not in DIC:
            ciphertext += i
        else:
            ciphertext += DIC[(DIC.index(i)+DIC.index(key[key_index % key_len])) % 26]
            key_index += 1
    return ciphertext
def decrypt_vigenere(string, key):
    if not judge_key(key):
        return -1
    plaintext = ""
    key_index = 0
    key_len = len(key)
    for i in string:
        if i not in DIC:
            plaintext += i
        else:
            plaintext += DIC[(DIC.index(i)-DIC.index(key[key_index % key_len])) % 26]
            key_index += 1
    return plaintext
if __name__ == '__main__':
    key_ = "linux"
    ciphertext_ = encrypt_vigenere("i love you", key_)
    plaintext_ = decrypt_vigenere(ciphertext_, key_)
    print(f"{plaintext_}: {ciphertext_}")
目录
相关文章
|
4月前
|
数据安全/隐私保护
登录中用于记住用户名和密码的方法
登录中用于记住用户名和密码的方法
35 0
|
6月前
|
安全 数据安全/隐私保护
如何安全的使用密码登录账号(在不知道密码的情况下)
该内容介绍了如何使用一个工具来便捷地复制和管理账号密码。首先提到了两个下载工具的链接,分别是百度网盘和蓝奏云,并给出了相应的提取码。接着,展示了工具的界面,说明通过按住Ctrl或Alt点击密码栏可以快速复制账号和密码,无需直接看到密码。用户可以通过模拟添加账号来体验这一功能,然后演示了如何生成和复制新密码。最后,重点强调了按住Ctrl复制账号和按住Alt复制对应密码的快捷操作,使得在不知密码的情况下也能轻松获取。
|
6月前
|
存储 安全 网络安全
如何取安全的密码?
如何取安全的密码?
48 0
|
6月前
|
存储 弹性计算 运维
循环测试用户名与密码是否正确
【4月更文挑战第29天】
32 0
|
6月前
|
存储 弹性计算 运维
测试用户名与密码是否正确
【4月更文挑战第29天】
38 0
|
数据安全/隐私保护 计算机视觉
QWE密码
QWE密码
350 0
|
Linux 数据安全/隐私保护
ADFGVX密码
ADFGVX密码
128 0
|
Linux 数据安全/隐私保护 知识图谱
ADFGX密码
ADFGX密码
252 0
|
Linux 数据安全/隐私保护
普莱费尔密码(playfair)
普莱费尔密码(playfair)
234 0
|
安全 算法 数据安全/隐私保护
C/C++编程题之简单密码
密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。