关键字密码(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_}")
目录
相关文章
|
SQL 编解码 网络安全
|
机器学习/深度学习 算法 安全
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
10162 113
|
关系型数据库 MySQL Linux
Centos7 yum如何下载离线安装包?(详解)
相信大家也遇到过这种问题,在没有外网的情况下,想安装一个服务却安装不了,这期我就教大家如何如何下载离线安装包,在内网中使用;
2885 0
Centos7 yum如何下载离线安装包?(详解)
|
缓存
Centos7.3修改yum源为阿里云yum源
Centos7.3修改yum源为阿里云yum源
9604 0
Centos7.3修改yum源为阿里云yum源
|
Python
Python中遇到奇怪的错误ValueError: bad marshal data
不是代码出的问题,是*.pyc文件被改动了。解决方法,删除所有*.pyc文件再运行
5262 0
|
9月前
|
机器学习/深度学习 人工智能 算法
小米7B参数推理大模型首次开源!Xiaomi MiMo:数学代码双杀,超越32B巨头
小米开源的MiMo推理大模型通过联动预训练与强化学习算法,在7B参数规模下实现数学推理与代码生成能力的突破性提升,技术报告显示其性能超越部分32B级模型。
1299 74
小米7B参数推理大模型首次开源!Xiaomi MiMo:数学代码双杀,超越32B巨头
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
423 4
|
12月前
|
Shell Linux Ruby
Python3虚拟环境venv
`venv` 是 Python 的虚拟环境工具,用于为不同项目创建独立的运行环境,避免依赖冲突。通过 `python3 -m venv` 命令创建虚拟环境,并使用 `source bin/activate` 激活。激活后,所有 Python 包将安装在该环境中,不影响系统全局环境。退出环境使用 `deactivate` 命令。每个虚拟环境拥有独立的包集合,确保项目间的隔离性。删除虚拟环境只需删除其目录即可。
1159 34
|
Windows
Windows系统命令dir使用详解
Windows系统命令dir使用详解
1858 2
|
Linux 数据安全/隐私保护 iOS开发
CTF—图像隐写三板斧(续)
CTF—图像隐写三板斧(续)
889 0

热门文章

最新文章