在日常工作中,我们经常会需要将数据库的用户名密码,或者是系统其他应用的用户密码写在配置文件中,用其他脚本来调用这些配置文件来做备份,或者运行其他系统任务,但是这种做法通常会因为明文密码写在配置文件里而得不到安全保障。
最初看到有些同事写的脚本直接密码就在脚本里边,造成严重的安全隐患。最后他又想了一个办法,就是把脚本用一些工具加密,让别人即使得到脚本,也看不到脚本里边的内容。这样做又产生了新的问题,如果脚本需要修改,必须先把脚本的内容转回来,然后修改,然后再加密…… 这样的做法显得很是麻烦,而且更重要的是,往往用到的那些加密脚本的方法都可以被解密,所以,这样不能从根本上解决密码暴露的问题。
有一个简单的解决方案,也是比较常用的解决方案,那就是我们可以把这些明文的密码或字串通过一定形式的转换,将它变成只有自己知道转换过程的加密字串,这个在现实中应用比较多,我们可以把加密字串写在配置文件中,在其他人看来就是一堆没有固定格式的加密串,而自己确可以按照自己特定的思路在脚本或者应用程序中解码。
下面是我用 python 写的一个简单的加密和解密的脚本,在生产环境应用的时候可以按照自己的思路,将它的算法写的尽可能的复杂,这样就不会轻易被别人猜到啦~~
加密明文字串(secrit.py):
#!/usr/bin/env python import os,sys,socket if len(sys.argv[:])!=1: print "\033[0;32mUsage: python " + sys.argv[0] + "\033[0m" sys.exit(0) mypass = list(raw_input('Please input your passwd:')) passlist = map((lambda x: ord(x)),mypass) passlist2= [] for m in passlist: if int(m) < 100: m = int(m) + 888 passlist2.append(m) password = '' for i in passlist2: password = password+str(i) try: hostname = socket.gethostname() except AttributeError, e: print "\033[0;31mWanning: ",e sys.exit(1) print 'Securet passwd: ',hex(long(password))[2:-1] + "@@" + hostname
|
解码密文字串(unsecrit.py):
#!/usr/bin/env python import sys if len(sys.argv[:])!=1: print "\033[0;32mUsage: python " + sys.argv[0] + "\033[0m" sys.exit(0) try: mypass = int('%s' % str(raw_input('Please input your passwd:').split('@@')[0]),16) except ValueError, e: print "\033[0;31mWanning: You are input a wrong secret passwd!\033[0m" sys.exit(1) passlist=[] for i in range(0,len(str(mypass)),3): x=0;y=3 x=x+i;y=y+i word = str(mypass)[x:y] if int(word) >= 800: word = int(word)-888 passlist.append(int(word)) hh = map((lambda x: chr(x)),passlist) password = '' for i in hh: password = password + str(i) print 'Password: ' + password
|
阅读(971) | 评论(2) | 转发(0) |