只能对字母进行加密),这象征字母H加密到字母U

 
在加密的各个算法中,凯撒加密是最简便易行的也是最常见的一种加密方法,它的骨干思想是替换,ROT加密其实就是凯斯加密的变种。

凯撒密码

  写出字母表的假名从A到Z的数字从0到25依照各样字母。A上边是0,B上边是1,等等,直到Z,上面为25.(有字母表中的26个字母,但大家的数字只升高到25,因为大家初步在0,而不是1):

图片 1

咱俩得以加密的假名,“Hello. How are you?” 为 “Uryyb. Ubj ner lbh?”

  用地方字母到数字的代码,我们可以用数字来代表字母。那是一个可怜有力的定义,因为数学使用数字。现在大家有了一个用字母写数学的法子。

  现在加密,大家找到的数字下的字母,大家期待加密和增加密钥号码给它。那些总和将是加密信下的号码。例如,我们加密,“Hello.
How are you?”
用钥匙13。首先,大家发现的H为7。然后我们添加这些编号的根本。7 + 13 =
20。数字20是为字母U,那意味字母H加密到字母U。加密的E字母,4加13到手17。17之上的数字是R,所以E得到加密R等。

  那样效果很好,然而直至大家获取字母O。O下的数字是14。但当大家添加14 +

 
即公开的有所字母都在字母表上向后(或向前)根据一个固定数目举办偏移后被替换成密文

13大家获得27。但是我们的数字唯有25。若是字母的多少和键的26或上述,我们相应减去它的26。所以27

26是1。数字1之上的假名是B,所以当我们利用密钥的时候,字母O对字母B举行加密。一个接一个

  所以加密字母的手续是:

  1。从1到25操纵一个数字为密钥。保持这一个密钥的机要!

  2。找到公开字母的号子。

  3。添加密钥数字到公开字母的号码,生成一个数字。

  4。若是那么些数字高于26,减去26。

  5。找到您计算的数字对应的假名。那就是密文。

  6。对公开中的逐个字母重复步骤2

  请看上面的表格,看看哪些行使密钥13加密“Hello. How are
you?”。逐个行都突显了将左手的明文字母转到右手的密文的手续。

图片 2
  解密,减去密钥数字,而不是增加它。对于密文B,数字是1。减去1 –
13收获-
12。像大家的“减法26”加密规则,当大家解密和结果是小于0,大家有一个“添加26”规则。-
12 + 26是14。所以密文字母B解密回字母O.

图片 3

(注:只可以对字母举行加密)

双强度加密?

  如果大家对“KITTEN”3键,得到的密文就是“nlwwhq”。即使大家对“nlwwhq”4键,得到的密文,将“rpaalu”。但那与大家用“7”键四遍加密“小猫”一词是一点一滴等同的。大家的“双”加密和常见加密是均等的,所以它没有更强的。

  对于半数以上加密算法,加密三遍以上不提供额外的密码强度。事实上,如若您用七个加起来相当26的密钥加密一些通晓,你最终收获的密文和原先的驾驭是如出一辙的!

反密码

​ 反向密码通过反向打印来加密音信。所以“Hello world!” 加密到“!dlrow
olleH”。要解密,只需反转反向音讯即可获取原始新闻。加密和平解决密步骤一样。那是一种万分薄弱的密码。只要看它的密文,你可以发现它只是相反的逐条。
.syas ti tahw tuo erugif llits ylbaborp nac uoy ,detpyrcne si siht
hguoht neve ,elpmaxe roF。

凯撒密码加密解密的贯彻

# encoding:utf-8

import string


def Encrypt(yourStr, KEY):

    C = string.ascii_letters
    # 生成符号映射
    lc = [chr((i - 97) % 26 + 97) for i in range(97 + KEY, 123 + KEY)]
    uc = [chr((i - 65) % 26 + 65) for i in range(65 + KEY, 91 + KEY)]
    R = ''.join(lc) + ''.join(uc)

    return yourStr.translate(string.maketrans(C, R))


def Decrypt(yourStr, KEY):

    C = string.ascii_letters
    # 生成符号映射
    lc = [chr((i - 97) % 26 + 97) for i in range(97 + KEY, 123 + KEY)]
    uc = [chr((i - 65) % 26 + 65) for i in range(65 + KEY, 91 + KEY)]
    R = ''.join(lc) + ''.join(uc)

    return yourStr.translate(string.maketrans(R, C))


if __name__ == '__main__':
    plainText = 'hello the world!'
    cipherText = Encrypt(plainText, 7)
    print(cipherText)
    plainText = Decrypt(cipherText, 7)
    print(plainText)

运转结果:

olssv aol dvysk!
hello the world!
[Finished in 0.1s]

反密码加密解密的兑现

# Reverse Cipher

message = 'Three can keep a secret, if two of them are dead.'
translated = ''
i = len(message) - 1
while i >= 0:
print(translated)
    translated = translated + message[i]
    i = i - 1

运转结果:

.daed era meht fo owt fi ,terces a peek nac eerhT

如此写实际很不切合Python优雅的特色,对代码进行大改造:

# Reverse Cipher

message = 'Three can keep a secret, if two of them are dead.'

def reverseDecrypt(str):
    return ''.join(reversed(message))

相关文章