关键字密码(Nihilist)

简介: 关键字密码(Nihilist)

关键字密码(Nihilist)

  • 加密对象:小写字母
  • 原理:
  • 是棋盘密码的变种,相对于棋盘密码,改密码的密码表是变化的,相对于关键字而变化
  • 关键字就是一
  • 种秘钥,由字母组成,由加密双方约定而成。密码表有25个位置,依次不重复的填入秘钥,在不重复的填入a~z.
  • 如:秘钥为linux,则密码表为:

1
2 3 4 5
1 l i n u x
2 a b c d e
3 f g h k m
4 o p q r s
5 t v w y z

  • 在将明文的每个字符通过查表找出行号和列号,行号在前,列号在后就组成了密文,最后将所有字符的密文以空格隔开组成最后的密文
  • 如:在"linux"为关键字的情况
  • 下,加密"abc"
  • a -> 21
  • b -> 22
  • c -> 23
  • 故密文为: “21 22 23”
  • 代码
# write by 2021/7/6
# 关键字密码,一种棋盘密码的变种
def create_table(key):
    key = key + "abcdefghiklmnopqrstuvwxyz"
    table = ""
    for i in key.replace("j", "i"):
        if i not in table:
            table += i
    return table
def encrypt_nihilist(string, key):
    ciphertext = ""
    table = create_table(key)
    for i in string.replace("j", "i").replace(" ", ""):
        if i in table:
            index = table.index(i)
            ciphertext += str(index // 5 + 1) + str(index % 5 + 1) + " "
        else:
            return -1
    return ciphertext.strip()
def decrypt_nihilist(string, key):
    plaintext = ""
    table = create_table(key)
    lis = string.split(" ")
    try:
        for i in lis:
            index = (int(i[0]) - 1) * 5 + int(i[1]) - 1
            plaintext += table[index]
            if table[index] == "i":
                plaintext += "(j)"
    except:
        return -1
    return plaintext
if __name__ == '__main__':
    ciphertext_ = encrypt_nihilist("linux", "linux")
    plaintext_ = decrypt_nihilist(ciphertext_, "linux")
    print(f"{plaintext_}: {ciphertext_}")
目录
相关文章
|
3月前
|
编译器 C++
c++关键字与三字符组
c++关键字与三字符组
38 0
|
2月前
|
数据安全/隐私保护
字符串\简单的密码处理
字符串\简单的密码处理
15 1
|
弹性计算 算法 应用服务中间件
nginx配置访问密码,实现用户输入用户名密码才能访
如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证。只有让用户输入正确的用户名和密码才能正常访问。效果如下:
2500 0
|
Shell SDN 数据安全/隐私保护
创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中
创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中
95 1
|
9月前
|
SQL 关系型数据库 MySQL
Mysql 关键字\保留字列表
Mysql 关键字\保留字列表
62 0
网站关键字匹配度不高怎么办?
恰当的关键字能为网站带来流量,关键字也能得到良好的排名,从而为企业带来更多的客户,因此关键字的选择对网站来说非常重要。那怎样选择关键字呢?选择流量稳定的关键字。
80 0
网站关键字匹配度不高怎么办?
|
数据安全/隐私保护
代码片段-密码强度校验
代码片段-密码强度校验
119 0
|
SQL MySQL 关系型数据库