首页 > 编程语言 >Python工具箱系列(九)

Python工具箱系列(九)

时间:2022-10-11 10:57:18浏览次数:47  
标签:平移 系列 Python Alice 明文 密码 密钥 工具箱 Bob

在计算机世界里,信息安全始终占据着重要的地位,我们随处就可以看到信息安全的应用:

◆ 访问网站时,使用https而不是http会使访问者的安全性大大提升

◆ 下载文件时,正规的网站都会提供MD5或类似的散列码,供下载后校验,以防止下载被篡改的文件(有可能包含病毒或恶意代码等)

◆ 网络银行或者手机银行的U盾或者电子证书等

◆ 区域链以及数字货币等

◆ ssh登录时的免密设置

◆ github需要提交的公钥等

以上种种无一不提示着密码学知识的重要性。从本文开始,将沿着数据加解密的思路,将开发能够用到的密码学知识简单地梳理下。密码学的基本目的是使得双方能够在不安全的信道上进行安全的通信,在计算机网络中,假设有两个人Alice和Bob,Alice想发送消息给Bob,告诉他一个重要信息,不能够让相关人知道。此时,Alice担心信息会被潜在的对手Oscar监听,甚至篡改消息内容来误导Bob。即使收到信息,Bob也对Alice发过来的消息有疑虑,不知道消息是否为Alice本人所发,消息内容是否真实等等。假设Alice事先和Bob商量好一个密钥(key),Alice通过密钥将明文(plaintext)加密成密文,在网络中传输,Bob收到Alice传过来的密文(ciphertext),用事先商量好的密钥进行解密,得到明文,而潜在对手Oscar即使监听到Alice发送的消息,也是加密过的密文,由于不知道密钥,所以无法知道真实的明文。

其基本过程如下图所示:

为了达到这个目的,许多有智之士设计出各解决方案,其中移位密码是最早,最简单且有效的方法之一。有据可查的可追溯至古罗马时代,尤利乌斯·恺撒曾经使用。移位密码的思路是通过将明文中所使用的字母按照一定的位移个数进行“平移”来加密,为了简化内容,如下图所示,在这里我们只使用英文字母作为示例。

如上图所示,最早期时,一般将字母平移3位,也就是a->d,b->e,c->f,这种最早平移3位的方案也叫恺撒密码(Caesar Cipher),后来经过修正,平移位数也不一定是3位,可以是其它任何整数位,统称为移位密码(Shift Cipher),可以知道,恺撒密码是移位密码的一个特例(key=3时)。现假设我们有明文P=china,密钥K=3, 现要将其加密,根据上表,将字符P中的每个字母平移3位,得到如下情况:

c->f
h->k
i->l
n->q
a->d

至此,明文china就被转换成了密文fklqd。移位密码的解密也非常简单,只要使用加密时用的密钥进行反向平移操作,刚来的例子只要将密文反向平移3位就行,可得到如下:

f->c
k->h
l->i
q->n
d->a

在实际应用时,密钥其实就是位移的个数。但这个数据规模在过去人类没有计算机的时代,靠人类有限的脑力与经验,确实很难猜出来,所以,移位密码是非常经典的算法。直到现在也可以用来进行简单的加解密,一般人不明就里,也就很难猜出其中的规律。但是,在现代计算机高科技面前,这种密码却不堪一击,只能算是玩具性质的益智游戏罢了。

标签:平移,系列,Python,Alice,明文,密码,密钥,工具箱,Bob
From: https://www.cnblogs.com/shanxihualu/p/16778471.html

相关文章

  • python + selenium 新手随笔 元素定位
    1.fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeys//Key表示键盘上的键,By定位文本中的元素fromselenium.webdriver.common.by......
  • 力扣594(java&python)-最长和谐子序列(简单)
    题目:和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给你一个整数数组nums,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序......
  • python study
    pythonpycharmPythonpip安装与使用pythonpippipinstallpyqt5pipinstallpyqt5_toolsqtdesigner就在python目录下:.\Python36\Lib\site-packages\pyqt5-tools。pyqt5_to......
  • Win10 环境下 vscode 没法在终端使用 conda activate 命令来更换 Python 环境的解决方
    在vscode上激活conda镜像如报下面错误:CommandNotFoundError:Yourshellhasnotbeenproperlyconfiguredtouse'condaactivate'.Ifusing'condaactivate'fr......
  • python如何调用openpyxl库把数据写入Excel?
    代码importosfromopenpyxlimportload_workbookproject_path=os.path.abspath(os.path.join(os.getcwd(),"../../../"))#获取项目路径根据实际改变#*====......
  • 盘点一个Python列表(元素多样)处理的实战题目(使用正则表达式也可以实现)
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【凡人不烦人】问了一个Python列表处理的问题,提问截图如下:下面是他的部分数据:lst=['(问答题)(2)假设镀......
  • [Android开发学iOS系列] iOS写UI的几种方式
    [Android开发学iOS系列]iOS写UI的几种方式作为一个现代化的平台,iOS的发展也经历了好几个时代.本文讲讲iOS写UI的几种主要方式和各自的特点.iOS写UI的方式在iOS中写U......
  • python基础
    编程语言介绍特点跨平台性执行效率开发效率机器语言二进制编码差三者中最高三者中最差汇编语言英文字符代替二进制差中中高级语言编译型、解......
  • Python:从入门到进阶
    导读本文将推荐一个Github开源项目:python-tutorial。本Python教程包含了一些范例,涵盖了大多数Python日常脚本任务,是入门Python的学习资料,也可以作为工作中编写Python脚本......
  • 学习python-Day70
    今天学习内容一、自定义频率类fromrest_framework.throttlingimportBaseThrottleclassMyThrottle(BaseThrottle):VISIT_RECORD={}#存放用户访问记录{ip......