python实现对服务器脚本敏感信息的加密解密功能

  

  

在实际项目实施中,会编写很多在服务器执行的作业脚本。程序中凡是涉及到数据库链接,操作系统用户链接,IP地址,主机名称的内容都是敏感信息。在纯内网系统中往因为开发时间紧迫,往往都直接将这些敏感信息明文方式写在脚本中了。

  

稍微规范一点的,创建一个通用的配置文件,将所有这类敏感信息记录在这个文件中,脚本以读取文件方式获取这些信息。这种方式的好处是脚本不用在应用迁移,灾备部署的时候再起不同的版本,尤其是大数据平台作业运行的脚本,如果是需要做灾备集群,这种方式可以减少生产变更时的人工干预操作。但是这种方式仍不能解决安全性的问题,只要配置文件泄露,那么平台会非常危险。

  

因此在这个配置文件的基础上,对其进行改造,实现对内容的加密,而脚本使用时再对其进行解密。因此要求有一个程序能对文本内容进行加密,也能进行反向解密。

  

不可逆的加密方法使用最多的就是md5加密算法,我们一般用来检验文件的完整和安全性,不适用这个场景。

  

使用python语言对文本内容进行加解密有多种方式,从网上搜索结果看主要有以下几种:

  

  

Base64是一种用64个字符来表示任意二进制数据的方法。

  

用记事本打开exe, jpg, pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法.Base64是一种最常见的二进制编码方法。

  

Base64的原理很简单,首先,准备一个包含64个字符的数组:

  

<代码> [A, B, C,…“a”、“b”,“c”,……' 0 ',' 1 ',…' + ','/>   

然后,对二进制数据进行处理,每3个字节一组,一共是3×8=24位,划为4组,每组正好6个,得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

  

所以,Base64编码会把3字节的二进制数据编码字为4节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文,网页等直接显示。

  

如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?

  

Base64用\ x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

  

Python内置的base64可以直接进行base64的编解码:

        进口base64   userPassword=" sunlinemdp201810 "   unkownPassword=base64.b64encode(字节(userPassword,“utf - 8”))   打印(“加密后:“+ str (unkownPassword“utf - 8”))   kownPassword=str (base64.b64decode (unkownPassword),“utf - 8”)   打印(“解密后:“+ kownPassword)      

补充说明:python3中对字符串加解密的方法<代码> base64.encodestring(测试)不能用因此只能采用字节方法然后中间进行格式转换

  

由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种“URL urlsafe_b64encode”的Base64编码方法,实现对+和/的转码,在现在使用的版本中这个功能已经整合在b64encode方法中了

        userPassword=" sunlinemdp201810 "   unkownPassword=base64.b64encode(字节(userPassword,“utf - 8”))   打印(“加密后:“+ str (unkownPassword“utf - 8”))   unkownPassword=base64.urlsafe_b64encode(字节(userPassword,“utf - 8”))   打印(“解密后:“+ str (unkownPassword“utf - 8”))   base64.urlsafe_b64decode (unkownPassword)      

  

样例代码如下:

        进口win32com.client   def加密(关键、内容):#键:密钥,内容:明文   EncryptedData=https://www.yisu.com/zixun/win32com.client.Dispatch (“CAPICOM.EncryptedData”)   EncryptedData.Algorithm。KeyLength=5   EncryptedData.Algorithm。Name=2   EncryptedData.SetSecret(关键)   EncryptedData。内容=返回EncryptedData.Encrypt ()   def解密(关键、内容):#键:密钥,内容:密文   EncryptedData=https://www.yisu.com/zixun/win32com.client.Dispatch (“CAPICOM.EncryptedData”)   EncryptedData.Algorithm。KeyLength=5   EncryptedData.Algorithm。Name=2   EncryptedData.SetSecret(关键)   EncryptedData.Decrypt(内容)   str=EncryptedData.Content   返回str      s1=加密(“智”,“hello world”)   s2=解密(‘智’,s1)   打印s1, s2      

win32com是python操作windows程序的第三方包,放在服务器上使用不太合适。

python实现对服务器脚本敏感信息的加密解密功能