多码加密 vigenere算法 python 实现
版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 基于我自己对 vigenere 的理解,另外vigenere 属于非常弱的一种加密,用于生产环境不是非常安全请注意 # -*- coding:utf-8 -*- ################################## # Vigenere 是一种多码加密法 # author vearne # ***注意***: # 1) 字母表中必须要包含明文中出现的字母 # 2) 密钥不能为空 # ################################## class Vigenere(object): def __init__(self, table='0123456789', key='apple'): # 字母表 self.table = table # 密钥 self.key = key def genNum(self, curr): if curr + 1 >= len(self.key): return 0 else: return curr + 1 def dict(self, chr, move): index = self.table.index(chr) return self.table[(index + move) % len(self.table)] def encrypt(self, cleartext): # i 指向明文, j 指向密钥 j = 0 ll = [] for i in range(len(cleartext)): move = ord(self.key[j]) % len(self.table) # print 'move', move new_chr = self.dict(cleartext[i], move) ll.append(new_chr) j = self.genNum(j) return ''.join(ll) def decrypt(self, ciphertext): # i 指向密文, j 指向密钥 j = 0 ll = [] for i in range(len(ciphertext)): move = ord(self.key[j]) % len(self.table) move = move * (-1) # print 'move', move new_chr = self.dict(ciphertext[i], move) ll.append(new_chr) j = self.genNum(j) return ''.join(ll) if __name__ == '__main__': v = Vigenere(key='apple077226') cleartext = '000000668' print cleartext ciphertext = v.encrypt(cleartext) print ciphertext print '----------------------------------' cleartext = v.decrypt(ciphertext) print cleartext 如果字母表中的字母出现不重复,则可以保证明文跟密文的一一映射,如果出现重复,则会出现明文跟密文的多对一映射。 ...