Python密码学仿射密码及攻击单字母密码教程

作者:菜鸟教程 时间:2021-01-25 05:52:28 

仿射密码

Affine Cipher是Multiplicative Cipher和Caesar Cipher算法的组合.

仿射密码的基本实现如下图所示 :

Python密码学仿射密码及攻击单字母密码教程

我们将通过创建包含两个加密和解密基本函数的相应类来实现仿射密码.

代码

您可以使用以下代码实现仿射密码 :

?class仿射(对象):
?DIE?=?128?
?KEY?=(7,3,55)
?def?__init?__(self):
#传递
?def?encryptChar(self,char):
?K1,K2,?kI?=?self.KEY?
?return?chr((K1?*?ord(char)+?K2)%self.DIE)
?def?encrypt(self,string):
?return""?.join(map(self.encryptChar,string))
?def?decryptChar(self,char):
?K1,K2,KI?=?self.KEY?
?return?chr(KI?*?(ord(char)?-??K2)%self.DIE)
?def?decrypt(self,string):
?return"".join(map(self.decryptChar,string))
?affine?=?Affine()
?print?affine.encrypt('?Affine?Cipher')
?print?affine.decrypt('*?18?FMT')

输出

实现仿射密码时,可以观察到以下输出;

Python密码学仿射密码及攻击单字母密码教程

输出显示纯文本消息仿射密码的加密消息和已作为输入 abcdefg发送的消息的解密消息.

单字母密码

接下来,您将学习使用Python的单字母密码及其黑客攻击.

单字母密码使用固定替换用于加密整个消息.这里显示使用带有JSON对象的Python字典的单字母密码 :

monoalpha_cipher?=?{
???'a':?'m',
???'b':?'n',
???'c':?'b',
???'d':?'v',
???'e':?'c',
???'f':?'x',
???'g':?'z',
???'h':?'a',
???'i':?'s',
???'j':?'d',
???'k':?'f',
???'l':?'g',
???'m':?'h',
???'n':?'j',
???'o':?'k',
???'p':?'l',
???'q':?'p',
???'r':?'o',
???'s':?'i',
???'t':?'u',
???'u':?'y',
???'v':?'t',
???'w':?'r',
???'x':?'e',
???'y':?'w',
???'z':?'q',
'?':?'?',
}

借助此词典,我们可以使用相关字母加密字母为JSON对象中的值.

以下程序创建一个单字母程序作为类表示,其中包括加密和解密的所有功能.

from?string?import?letters,?digits
from?random?import?shuffle
def?random_monoalpha_cipher(pool?=?None):
???if?pool?is?None:
??????pool?=?letters?+?digits
???original_pool?=?list(pool)
???shuffled_pool?=?list(pool)
???shuffle(shuffled_pool)
???return?dict(zip(original_pool,?shuffled_pool))
def?inverse_monoalpha_cipher(monoalpha_cipher):
???inverse_monoalpha?=?{}
???for?key,?value?in?monoalpha_cipher.iteritems():
??????inverse_monoalpha[value]?=?key
???return?inverse_monoalpha
def?encrypt_with_monoalpha(message,?monoalpha_cipher):
???encrypted_message?=?[]
???for?letter?in?message:
??????encrypted_message.append(monoalpha_cipher.get(letter,?letter))
???return?''.join(encrypted_message)
def?decrypt_with_monoalpha(encrypted_message,?monoalpha_cipher):
???return?encrypt_with_monoalpha(
??????encrypted_message,
??????inverse_monoalpha_cipher(monoalpha_cipher)
???)

稍后调用此文件以实现Monoalphabetic密码的加密和解密过程,如下所示 :

import?monoalphabeticCipher?as?mc
cipher?=?mc.random_monoalpha_cipher()
print(cipher)
encrypted?=?mc.encrypt_with_monoalpha('Hello?all?you?hackers?out?there!',?cipher)
decrypted?=?mc.decrypt_with_monoalpha('sXGGt?SGG?Nt0?HSrLXFC?t0U?UHXFX!',?cipher)
print(encrypted)
print(decrypted)

输出

当您实现上面给出的代码时,您可以观察到以下输出;

Python密码学仿射密码及攻击单字母密码教程

T嗯,你可以用一个指定的键值对来破解单字母密码,这会将密文破解成实际的纯文本.

来源:https://www.it1352.com/OnLineTutorial/cryptography_with_python/cryptography_with_python_affine_cipher.html

标签:Python,密码学,仿射密码,攻击,单字母密码
0
投稿

猜你喜欢

  • PyQt5中QTimer定时器的实例代码

    2021-06-01 07:28:54
  • python 爬虫请求模块requests详解

    2022-09-06 01:33:32
  • sql自动增长标识导致导入数据问题的解决方法

    2023-07-04 04:39:22
  • Flaks基础之在URL中添加变量的实现详解

    2023-07-22 00:42:20
  • python导入不同目录下的自定义模块过程解析

    2022-11-08 16:05:47
  • 浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

    2021-07-04 08:53:54
  • 详解python第三方库的安装、PyInstaller库、random库

    2023-03-13 06:57:46
  • asp GetString的用法

    2008-06-12 13:46:00
  • Python爬虫辅助利器PyQuery模块的安装使用攻略

    2023-10-18 02:19:34
  • Python中基本数据类型和常用语法归纳分享

    2023-09-08 21:08:01
  • python:目标检测模型预测准确度计算方式(基于IoU)

    2023-04-17 08:51:19
  • Django查询数据库的性能优化示例代码

    2024-01-22 22:18:48
  • java连接mysql数据库乱码的解决方法

    2024-01-21 06:26:15
  • 网页设计标准尺寸参考

    2007-12-29 20:42:00
  • opencv-python 开发环境的安装、配置教程详解

    2022-04-25 22:14:58
  • 使用Python编写类UNIX系统的命令行工具的教程

    2023-08-24 05:03:02
  • python:批量统计xml中各类目标的数量案例

    2021-11-17 05:22:44
  • Pycharm运行加载文本出现错误的解决方法

    2021-02-01 09:07:18
  • Python实现网站注册验证码生成类

    2023-10-24 13:58:02
  • 一个滑动门菜单例子源码

    2007-12-31 10:16:00
  • asp之家 网络编程 m.aspxhome.com