这里主要记录 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))。(取自互动百科)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)通过散列算法变换成固定长度的,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的的函数。(取自百度百科)
hash 是不可逆的。
1 def md5(strs):2 m = hashlib.md5()3 m.update(strs.encode('utf8'))4 return m.hexdigest()
参考: