程式設計中經常會對字串做加密解密處理,特別是涉及到隱私的字串,如密碼等的時候,就需要加密,自己總結了一下,大致有三種: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=  
  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,` `,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作為指令碼來執行。