前两篇文章介绍了如何使用MFC架构程序和如何在MFC中调用Python程序。今天介绍如何在python中实现加解密功能,包括urlencode、unicode、ascii和16进制互转、rot13、base64、QWE、阿特巴什、摩斯码、ADFGX、培根、凯撒、维吉尼亚等算法。
一、加密程序
urlencode
def Myurldecode(m_str):
return quote(m_str)
unicode
def Myunicode(m_str):
return m_str.encode('unicode_escape')
大小写互换
def Myswapcase(m_str):
return m_str.swapcase()
ascii转16进制
def AsciiToHex(m_str):
return binascii.b2a_hex(m_str)
16进制转ascii
def HexToAscii(m_str):
return binascii.a2b_hex(m_str)
ROT13
def S_rot13(s, OffSet=13):
def encodeCh(ch):
f=lambda x: chr((ord(ch)-x+OffSet) % 26 + x)
return f(97) if ch.islower() else (f(65) if ch.isupper() else ch)
return ''.join(encodeCh(c) for c in s)
Bash64
def MyBase64(m_str):
str1 = base64.b64encode(m_str)
return str1
QWE编码
QWE_dicts = {'K':'a','X':'b','V':'c','M':'d','C':'e','N':'f','O':'g','P':'h','H':'i','Q':'j','R':'k','S':'l','Z':'m','Y':'n','I':'o','J':'p','A':'q','D':'r','L':'s','E':'t','G':'u','W':'v','B':'w','U':'x','F':'y','T':'z'};
def S_QWE(S_str):
result ='';
S_str = S_str.upper();
for i in range(len(S_str)):
if S_str[i].isupper():
result += ''.join(QWE_dicts[S_str[i]]);
else:
result += ''.join(S_str[i]) ;
return result;
阿特巴什(Atbash)编码
Atbash_dicts = {'A':'z','B':'y','C':'x','D':'w','E':'v','F':'u','G':'t','H':'s','I':'r','J':'q','K':'p','L':'o','M':'n','N':'m','O':'l','P':'k','Q':'j','R':'i','S':'h','T':'g','U':'f','V':'e','W':'d','X':'c','Y':'b','Z':'a'};
def S_Atbash(S_str):
result ='';
S_str = S_str.upper();
for i in range(len(S_str)):
if S_str[i].isupper():
result += ''.join(Atbash_dicts[S_str[i]]);
else:
result += ''.join(S_str[i]) ;
return result;
摩斯码(Morse)
Morse_encoding = {'A': '.-','B': '-...','C': '-.-.','D': '-..','E': '.','F': '..-.','G': '--.',
'H': '....','I': '..','J': '.---','K': '-.-','L': '.-..','M': '--','N': '-.',
'O': '---','P': '.--.','Q': '--.-','R': '.-.','S': '...','T': '-',
'U': '..-','V': '...-','W': '.--','X': '-..-','Y': '-.--','Z': '--..',
'0': '-----', '1': '.----', '2': '..---','3': '...--', '4': '....-',
'5': '.....','6': '-....', '7': '--...', '8': '---..', '9': '----.',
'.':'.-.-.-', ',':'--..--', ':':'---...', '?':'..--..',
'-':'-....-', '/':'-..-.', '=':'-...-', '@': '...-.-',
'!':'...-.-', '\n':'', '%':'.-.-', ',':'--..--',
';':'-.-.-.', '_':'..--.-', '"':'.-..-.', '(':'-.--.',
')':'-.--.-', '$':'...-..-', ' ':' ', "'": '.----.' }
def S_Morse(S_str):
result ='';
S_str = S_str.upper();
for i in range(len(S_str)):
result += Morse_encoding[S_str[i]] + ' '
return result;
培根编码(Bacon)
Bacon_dicts1 = {'a':'aaaaa','b':'aaaab','c':'aaaba','d':'aaabb','e':'aabaa',
'f':'aabab','g':'aabba','h':'aabbb','i':'abaaa','j':'abaab',
'k':'ababa','l':'ababb','m':'abbaa','n':'abbab','o':'abbba',
'p':'abbbb','q':'baaaa','r':'baaab','s':'baaba','t':'baabb',
'u':'babaa','v':'babab','w':'babba','x':'babbb','y':'bbaaa','z':'bbaab'};
Bacon_dicts2 = {'a':'AAAAA','b':'AAAAB','c':'AAABA','d':'AAABB','e':'AABAA',
'f':'AABAB','g':'AABBA','h':'AABBB','i':'ABAAA','j':'ABAAA',
'k':'ABAAB','l':'ABABA','m':'ABABB','n':'ABBAA','o':'ABBAB',
'p':'ABBBA','q':'ABBBB','r':'BAAAA','s':'BAAAB','t':'BAABA',
'u':'BAABB','v':'BAABB','w':'BABAA','x':'BABAB','y':'BABBA','z':'BABBB'};
def S_Bacon(S_str):
result ='Mode1: '
S_str = S_str.lower();
for i in range(len(S_str)):
if S_str[i].islower():
result += ''.join(Bacon_dicts1[S_str[i]])
else:
result += ''.join(S_str[i])
result += "\r\nMode2: "
for j in range(len(S_str)):
if S_str[j].islower():
result += ''.join(Bacon_dicts2[S_str[j]])
else:
result += ''.join(S_str[j])
return result
ADFGX编码
ADFGX_dicts = {'b':'AA','t':'AD','a':'AF','l':'AG','p':'AX',
'd':'DA','h':'DD','o':'DF','z':'DG','k':'DX',
'q':'FA','f':'FD','v':'FF','s':'FG','n':'FX',
'g':'GA','i':'GD','j':'GD','c':'GF','u':'GG','x':'GX',
'm':'XA','r':'XD','e':'XF','w':'XG','y':'XX'};
def S_ADFGX(S_str):
result ='';
S_str = S_str.lower();
for i in range(len(S_str)):
if S_str[i].islower():
result += ''.join(ADFGX_dicts[S_str[i]]);
else:
result += ' ';
return result
12345编码
ADFGX_dicts2 = {'a':'11','b':'12','c':'13','d':'14','e':'15',
'g':'21','g':'22','h':'23','i':'24','j':'24','k':'25',
'l':'31','m':'32','n':'33','o':'34','p':'35',
'q':'41','r':'42','s':'43','t':'44','u':'45',
'v':'51','w':'52','x':'53','y':'54','z':'55'};
def S_ADFGX2(S_str):
result ='';
S_str = S_str.lower();
for i in range(len(S_str)):
if S_str[i].islower():
result += ''.join(ADFGX_dicts2[S_str[i]]);
else:
result += ' ' ;
return result
凯撒编码
def S_Caesar(S_str):
S_return = ''
for i in xrange(0,26):
S_return += S_rot13(S_str,i) + '\r\n'
return S_return
维吉尼亚编码
def S_Vigenere(all_the_text):
abc = "abcdefghijklmnopqrstuvwxyz"
key = list(abc)
random.shuffle(key)
key = "".join(key)
trans = string.maketrans(abc, key)
return all_the_text.translate(trans)
下章介绍解密程序
【未完待续】