#python密码学编程学习笔记 (敲字不易)

##什么是密码学:
现代密码学所涉及的学科包括:信息论、概率论、数论、计算复杂性理论、近世代数、离散数学、代数几何学和数字逻辑等。
专业术语
‘密钥:分为加密密钥和解密密钥。’
‘明文:没有进行加密,能够直接代表原文含义的信息。’
‘密文:经过加密处理处理之后,隐藏原文含义的信息。’
‘加密:将明文转换成密文的实施过程。’
‘解密:将密文转换成明文的实施过程’密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。
直到现代以前,密码学几乎专指加密(encryption)算法:将普通信息(明文,plaintext)转换成难以理解的资料(密文,ciphertext)的过程;解密(decryption)算法则是其相反的过程:由密文转换回明文;加解密包含了这两种算法,一般加密即同时指称加密(encrypt或encipher)与解密(decrypt或decipher)的技术。
加解密的具体运作由两部分决定:一个是算法,另一个是密钥。密钥是一个用于加解密算法的秘密参数,通常只有通讯者拥有。历史上,密钥通常未经认证或完整性测试而被直接使用在密码机上。
密码协议(cryptographic protocol)是使用密码技术的通信协议(communication protocol)。近代密码学者多认为除了传统上的加解密算法,密码协议也一样重要,两者为密码学研究的两大课题。在英文中,cryptography和cryptology都可代表密码学,前者又称密码术。但更严谨地说,前者(cryptography)指密码技术的使用,而后者(cryptology)指研究密码的学科,包含密码术与密码分析。密码分析(cryptanalysis)是研究如何破解密码学的学科。但在实际使用中,通常都称密码学(英文通常称cryptography),而不具体区分其含义。
口语上,编码(code)常意指加密或隐藏信息的各种方法。然而,在密码学中,编码有更特定的意义:它意指以码字(code word)取代特定的明文。例如,以‘苹果派’(apple pie)替换‘拂晓攻击’(attack at dawn)。编码已经不再被使用在严谨的密码学,它在信息论或通讯原理上有更明确的意义。
在汉语口语中,电脑系统或网络使用的个人帐户口令(password)也常被以密码代称,虽然口令亦属密码学研究的范围,但学术上口令与密码学中所称的钥匙(key)并不相同,即使两者间常有密切的关连。
##反转加密法
###1.涉及到的python知识:
len()函数
while循环
布尔数据类型
比较运算符
条件
代码块
###2.反转加密法的原理-通过反向输出消息进行加密
例如:hello->加密成olleh
加密安全:非常弱
这里以一个程序实现,源码如下(倒序输出字符串):message = 'sjshdsdg'//密文i = len(message) - 1translated = ' 'while i >= 0:
translated = translated + message[i] i = i - 1print(translated)//明文
练习题:http://invpy.com/hackingpractice5A
##凯撒加密法
涉及到的python知识:
import语句
常量
upper()
for循环
if,elif.else语句
in not in 运算符
find()
叙述起来相当的麻烦因此这里借用书本上的原文
主要算法:
加密:
1. 从1-25选择一个秘钥
2. 找出明文字母的数字(A - Z 为 0-25)
3. 秘钥与明文字母数字相加
4. 如果数字大于26,则减去26
5. 再对应字母表找出这个数字对应的字母即密文
6. 对明文消息里每个字母重复2-5
解密:
- 密文减秘钥
- 如果秘钥<0则再加26
- 找出数字对应的字母即明文
代码实现加密:message = 'hello world'
key = 13mode = 'encrypt'LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
translated = ' 'message = message.upper()
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
if mode == 'encrypt':
num = num + key
elif mode == 'decrypt':
num = num - key
if num >= len(LETTERS):
num = num - len(LETTERS)
elif num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]`
else:
translated = translated + symbol
print(translated)

