python 简单加密算法小计
这里主要记录 ROT 算法 和 hash 算法
一、ROT13算法
套用ROT13到一段文字上仅仅只需要检查字元字母顺序并取代它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可[2]。A换成N、B换成O、依此类推到M换成Z,然后序列反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里头的字元受影响;数字、符号、空白字元以及所有其他字元都不变。因为只有在英文字母表里头只有26个,并且26=2×13,ROT13函数是它自己的逆反:
对任何字元x:ROT13(ROT13(x))=ROT26(x)=x。
换句话说,两个连续的ROT13应用函式会回复原始文字(在数学上,这有时称之为对合(involution);在密码学上,这叫做对等加密(reciprocalcipher))。(取自互动百科http://www.baike.com/wiki/ROT13&prd=so_1_doc)
1 def rot13(strs, offset=13): 2 rot = {chr(i+c): chr((i+offset) % 26 + c for i in range(26) for c in (65, 97))} 3 return ''.join([rot.get(c, c) for c in strs])
二、ROT47算法
ROT47算法是ROT13算法的衍生算法,主要包含了常用特殊字符、数字及大小写字母。
1 def rot47(strs, offset=23): 2 d = {chr(i+c) : chr((i+offset) % 46 + c) for i in range(46) for c in (33, 80)} 3 return ''.join([d.get(c, c) for c in strs]) 4 5 6 # 另一种算法 7 def rot47(strs): 8 sl = [] 9 for i in range(len(strs)): 10 j = ord(strs[i]) 11 if j >= 33 and j <= 126: 12 sl.append(chr(((j+14) % 94) + 33)) 13 else: 14 sl.append(strs[i]) 15 return ''.join(sl)
三、hash算法
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。(取自百度百科https://baike.baidu.com/item/Hash/390310)
hash 是不可逆的。
1 def md5(strs): 2 m = hashlib.md5() 3 m.update(strs.encode('utf8')) 4 return m.hexdigest()
参考:
https://www.cnblogs.com/c-hy/archive/2012/08/04/2623453.html