Python工具箱系列(九)

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

◆ 访问网站时,使用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发送的消息,也是加密过的密文,由于不知道密钥,所以无法知道真实的明文。

其基本过程如下图所示:

Python工具箱系列(九)

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

Python工具箱系列(九)

如上图所示,最早期时,一般将字母平移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工具箱系列(九) - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python工具箱系列(十九)

    有了非对称密钥、摘要、对称密钥等现代密码学算法与技术,是不是就能够保证通信的安全无虞呢,并不是。 密码学在互联网应用的四个目标:机密性、完整性、身份验证、防抵赖。到目前为止,我们讨论的技术中,其中防抵赖的目标并没有达到。 假设A、B、C三个人共享一个对称加密算法密钥,现在A和B互相通信,A和B一直认为是双方在发送消息。由于C也有同样的密钥,它可以拦截A发往B…

    Python开发 2023年4月2日
    00
  • Python工具箱系列(二十四)

    不管多少人黑微软,微软出品的大多数产品都能够深入人心,成为精品。在数据库领域,微软为专业人士提供SQL Server(简称mssql)。为日常办公人士提供Access与Excel这两款数据存储与分析的神器。 SQL Server是微软在数据库领域打造的旗舰产品,使用起来安全、稳定、可靠,并且对于SQL语言的语法与特性支持的非常好。长期以来由于微软敌视开源运动…

    2023年3月31日
    00
  • Python工具箱系列(二十六)

    ClickHouse(Click Stream,Data WareHouse)是俄罗斯的 Yandex于2016年开源的用于在线分析处理查询(OLAP:Online Analytical Processing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告。特别值得称道…

    Python开发 2023年3月31日
    00
  • Python工具箱系列(八)

    前面我们提到过,有以下工具都可以开发Python代码: 直接使用Python解释器。运行Python就可以得到一个交互式命令行界面,可以简单的测试代码。作为Python入门,写代码不超过10行,完全可用。如果想开发大型代码,这个真心很难用。 使用IPython,也是命令行界面,但内置非常方便的各种宏与功能。比单纯的Python交互界面强太多。在某些情况下,例…

    2023年4月2日
    00
  • Python工具箱系列(十八)

    非对称加解密应用广泛,它的存在是致力于解决密钥通过公共信道传输这一经典难题。对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥,而这个密钥在传递过程中有可能会被截获,从而使加解密失效。难不成还要为密钥的传输再做一次加密?这样不就陷入了死循环?或许有人在想,密钥即使被盗取,不还有加密算法保证信息安全吗?但任何算法最终都会被破译,所以不能依赖算法的复…

    Python开发 2023年4月2日
    00
  • Python工具箱系列(十三)

    上文介绍了使用AES算法进行文件加解密的代码。但是如果在代码中写死了(hardcode)文件名,每次要加解密文件都要去改python源代码,显然有些太笨了。为此,可以使用命令行参数来在不改动源代码的情况下,对命令行参数所指定的文件进行加/解密操作。也可以指定加解密后输出的文件名称,以方便使用。 我们如下约定: python文件名为aeshandler.py …

    Python开发 2023年4月2日
    00
  • Python工具箱系列(二十二)

    互联网世界里最流行的开源关系型数据库之一就是MySQL/MariaDB了,由于高度的相似,故而直接使用mysql统一指称。 windows下的安装 windows最吸引人的地方就在于易于安装。mysql在WINDOWS下也是最容易安装的。直接在官网上下载可安装程序,一路NEXT即可。 ubuntu18.04的安装 如果是生产环境部署,建议以普通用户角色,使用…

    Python开发 2023年3月31日
    00
  • Python工具箱系列(三十一)

    Neo4j是一个高性能的开源的,使用Java语言实现的NoSQL图数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。现实中很多数据都是用图来表达的,比如社交…

    python 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部