系列目录
前言
关键词:密码加密
一、编程要点
常见的密码加密方式主要有以下三种方式:
- MD5加密
- Base64加密
- SHAI加密
然而本节都不涉及(滑稽脸),本实例主要是提供一种加密的技巧供扩展思路。以下是涉及到的主要函数讲解:
- ord()函数:可以将字符转化为你所需要的ASCII码
- chr()函数:可以将0-255中的任一整数转化为你所需要的字符
二、代码实现
#功能:形成密码前缀,实现方式是对密码中的每个字符进行转换得到新的字符串。
def passwd_pre(pwd):
vret = []
for char in pwd:
if char in 'abc':
char = '!'
elif char in 'def':
char = '@'
elif char in 'ghi':
char = '#'
elif char in 'jkl':
char = '%'
elif char in 'mno':
char = '^'
elif char in 'pqr':
char = '&'
elif char in 'stu':
char = '*'
elif char in 'vwx':
char = '>'
elif char in 'yz':
char = '?'
elif char in 'Z':
char = 'a'
elif char.isupper():
char = chr(ord(char.lower())+1)
vret.append(char)
return ''.join(vret)
#功能:根据传入的密码和两个字符串对密码中字符进行转换
def change_txt(pwd, str1, str2):
vret = ''
pwd = pwd.lower()
for char in pwd:
j = str1.find(char)
if j == -1:
vret = vret + char
else:
vret = vret + str2[j]
return vret
#功能:加密程序
def change_password(pwd):
if pwd == None:
return '-1'
vret = ''
vpre = passwd_pre(pwd)
vlen = len(pwd)
vstr = change_txt(pwd,"1234567890abcdefghijklmnopqrstuvwxyz","abcdefghijklmnopqrstuvwxyz1234567890")
if vlen <= 4:
vret = vpre + vstr[0:vlen]
else:
vret = vpre + vstr[0:4]
vstr = change_txt(pwd,"1234567890abcdefghijklmnopqrstuvwxyz","qwertyuiopasdfhgjklmnbvcxz0987654321")
if vlen <= 4:
vret = vret + vstr[0:vlen]
else:
vret = vret + vstr[0:4]
vstr = change_txt(pwd,"1234567890abcdefghijklmnopqrstuvwxyz","1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9o10p")
if vlen <= 4:
vret = vret + vstr[0:4]
else:
vret =vret + vstr[0:4]
vstr = change_txt(pwd,"1234567890abcdefghijklmnopqrstuvwxyz","pl0okm9ijn8uhb7ygv6tfc5rdx4esz3wa2ql")
if vlen <= 4:
vret = vret + vstr[0:vlen]
else:
vret = vret + vstr[0:4]
return vret
#主函数:main
if __name__== '__main__':
while True:
pwd = input("请输入密码:")
if pwd == 'q':
print("退出程序。。。")
break
else:
pwdnew = change_password(pwd)
print('您录入的密码是',pwd,',该密码加密后为',pwdnew)
运行效果:
请输入密码:testT123@/
您录入的密码是 testT123@/ ,该密码加密后为 *4o347h87if8iz7sz
请输入密码:q
退出程序。。。
总结
代码在开始定义了passwd_pre()、change_txt()和change_password()三个函数。passwd_pre()函数对密码的每个字符进行转换,其返回的值作为加密后的密码前缀;change_txt()函数实现对字符串中每个字符进行转化的功能;change_password()函数调用了passwd_pre()函数得到新密码的前缀,4次调用change_txt()函数取得4个字符串,并把这4个字符串追加到新密码中,这样就得到一个加密的密码。
主函数取得用户录入的密码,调用change_password()函数进行密码加密,然后把原密码与加密后的密码显示出来。