返回教程主页
上篇 密码篇・操作环境准备
密码学(英语:Cryptography)可分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及与其相对应的破译方法。而现代密码学不只关注信息保密问题,还同时涉及信息完整性验证(消息验证码)、信息发布的不可抵赖性(数字签名)、以及在分布式计算中产生的来源于内部和外部的攻击的所有信息安全问题。
古典密码・凯撒密码
凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如确定偏移量为3,英文字母A被D替代,B被E替代,C被F替代并以此类推:
A | B | C | D | … | X | Y | Z |
---|
D | E | F | G | … | A | B | C |
根据上述表格所示的规则,我们可以将明文“HELLO WORLD"加密成密文“KHOOR ZRUOG”。
使用Python实现凯撒加密:
import string
# 取出string模块内置的大写英文字母
case = string.ascii_uppercase
length = len(case)
bias = int(input('偏移: ').strip())
src = input('文本: ').strip().upper() # upper方法转换字母为大写
dst = ''
for c in src:
# 使用字符串的find方法找出字符c在字符串case中的位置
# 如果没有找到将返回-1,否则返回所在位置的下标
i = case.find(c)
if i < 0:
# 如果没有找到就直接将字符拼接到dst
dst += c
else:
# 如果找到了,就通过转换得到偏移后的位置j
j = (i + bias) % length
dst += case[j] # 将偏移后的字母拼接到dst
print(src, '->', dst)
运行效果:
偏移: 3
文本: hello world
HELLO WORLD -> KHOOR ZRUOG
凯撒密码破译难度非常低,一旦被人识破所使用的加密方式为凯撒加密,破解者只需要进行少量的排查就能完成密码破译工作。
古典密码・简易替换密码
简易替换加密是一种以特定方式改变字母表上字母顺序,并以此顺序书写的加密方式。这样一张改变了字母次序的字母表即为‘替换表’。传统上会先把一个关键词写在字母表最前面,再删去重复字母,这样就能得到一个混合表。
例如使用混合表系统,关键字为“zebras”:
明文字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表 ZEBRASCDFGHIJKLMNOPQTUVWXY
对"flee at once. we are discovered!“进行加密得到结果"SIAA ZQ LKBA. VA ZOA RFPBLUAOAR!"。
使用Python实现简易替换密码:
import string
p_case = string.ascii_uppercase
c_case = input('单词: ').strip().upper()
for c in p_case:
if c not in c_case:
c_case += c
print('明文字母表:', p_case)
print('密文字母表:', c_case)
src = input('文本: ').strip().upper()
dst = ''
for c in src:
i = p_case.find(c)
if i < 0:
dst += c
else:
dst += c_case[i]
print(src, '->')
print(dst)
运行效果:
单词: zebras
明文字母表: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表: ZEBRASCDFGHIJKLMNOPQTUVWXY
文本: flee at once. we are discovered!
FLEE AT ONCE. WE ARE DISCOVERED! ->
SIAA ZQ LKBA. VA ZOA RFPBLUAOAR!
虽然简易替换密码比凯撒密码复杂度高,然而还是可能被借用词频统计等方法推测出明文内容,随着加密文本量的增加还会使得破译的几率增大。
除了简易替换密码,还有谐音替换法、多表替换加密、表格式替换加密、机械替换加密、一次性密码本等不同形式的替换式密码,如果大家感兴趣,可以在网上搜集资料扩展更多的知识。
下篇 密码篇・对称密钥加密