Python字符串加密解密方法总结

    编程中经常会对字符串做加密解密处理,特别是涉及到隐私的字符串,如密码等的时候,就需要加密,自己总结了一下,大致有三种:base64,win32com.client和自己写加密解密算法,当然最安全的就是自己写加密解密算法了。

 
 
  1. 1. 最简单的方法是用base64: 
  2.  
  3. import base64 
  4.  
  5. s1 = base64.encodestring('hello world'
  6. s2 = base64.decodestring(s1) 
  7. print s1,s2 
  8.  
  9. # aGVsbG8gd29ybGQ=\n 
  10. # hello world 
  11.  
  12. 注: 这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文;不过可以把密文字符串进行处理,如字母转换成数字或是特殊字符等,自己解密的时候在替换回去在进行base64.decodestring,这样要安全很多。 
  13.  
  14.  
  15.  
  16.  
  17. 2. 第二种方法是使用win32com.client 
  18.  
  19. import win32com.client 
  20. def encrypt(key,content): # key:密钥,content:明文 
  21.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  22.     EncryptedData.Algorithm.KeyLength = 5 
  23.     EncryptedData.Algorithm.Name = 2 
  24.     EncryptedData.SetSecret(key) 
  25.     EncryptedData.Content = content 
  26.     return EncryptedData.Encrypt() 
  27.  
  28. def decrypt(key,content): # key:密钥,content:密文 
  29.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  30.     EncryptedData.Algorithm.KeyLength = 5 
  31.     EncryptedData.Algorithm.Name = 2 
  32.     EncryptedData.SetSecret(key) 
  33.     EncryptedData.Decrypt(content) 
  34.     str = EncryptedData.Content 
  35.     return str 
  36.  
  37. s1 = encrypt('lovebread''hello world'
  38. s2 = decrypt('lovebread', s1) 
  39. print s1,s2 
  40.  
  41. # MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq 
  42. # GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx 
  43. # lG7o 
  44. # hello world 
  45.   
  46.  
  47. 注:  这种方法也很方便,而且可以设置自己的密钥,比第一种方法更加安全,如果对安全级别要求不太高的话这种方法是加密解密的首选之策! 
  48.  
  49.   
  50.  
  51. 3. 还有就是自己写加密解密算法,比如: 
  52.  
  53. def encrypt(key, s): 
  54.     b = bytearray(str(s).encode("gbk")) 
  55.     n = len(b) # 求出 b 的字节数 
  56.     c = bytearray(n*2
  57.     j = 0 
  58.     for i in range(0, n): 
  59.         b1 = b[i] 
  60.         b2 = b1 ^ key # b1 = b2^ key 
  61.         c1 = b2 % 16 
  62.         c2 = b2 // 16 # b2 = c2*16 + c1 
  63.         c1 = c1 + 65 
  64.         c2 = c2 + 65 # c1,c2都是0~15之间的数,加上65就变成了A-P 的字符的编码 
  65.         c[j] = c1 
  66.         c[j+1] = c2 
  67.         j = j+2 
  68.     return c.decode("gbk"
  69.  
  70. def decrypt(key, s): 
  71.     c = bytearray(str(s).encode("gbk")) 
  72.     n = len(c) # 计算 b 的字节数 
  73.     if n % 2 != 0 : 
  74.         return "" 
  75.     n = n // 2 
  76.     b = bytearray(n) 
  77.     j = 0 
  78.     for i in range(0, n): 
  79.         c1 = c[j] 
  80.         c2 = c[j+1
  81.         j = j+2 
  82.         c1 = c1 - 65 
  83.         c2 = c2 - 65 
  84.         b2 = c2*16 + c1 
  85.         b1 = b2^ key 
  86.         b[i]= b1 
  87.     try
  88.         return b.decode("gbk"
  89.     except
  90.         return "failed" 
  91.  
  92. key = 15 
  93. s1 = encrypt(key, 'hello world'
  94. s2 = decrypt(key, s1) 
  95. print s1,'\n',s2  
  96.  
  97. # HGKGDGDGAGPCIHAGNHDGLG 
  98. # hello world 
  99.  
  100.  
  101. 注: 这是网上抄来的一个简单的例子,大家可以自定义自己算法进行加密解密;还有许许多多复杂的加密算法,大家可以自行查阅密码学的相关算法。 
  102.  
  103. 4.对于python来说,也可以把python源码文件编译成pyc二进制格式的文件,这样别人就看不到你的源码,也算是一种加密方法吧,方法如下: 
  104. 执行命令python -m py_compile create_slave.py 可以直接生成一个create_slave.pyc文件,然后可以用create_slave.pyc来替换create_slave.py作为脚本来执行。 

 

    原文作者:AIOPS_DBA
    原文地址: https://blog.51cto.com/wangwei007/1108784
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞