1. 程式人生 > >python中加密解密

python中加密解密

    程式設計中經常會對字串做加密解密處理,特別是涉及到隱私的字串,如密碼等的時候,就需要加密,自己總結了一下,大致有三種:base64,win32com.client和自己寫加密解密演算法,當然最安全的就是自己寫加密解密演算法了。

  1. 1. 最簡單的方法是用base64: 
  2. import base64 
  3. s1 = base64.encodestring('hello world'
  4. s2 = base64.decodestring(s1) 
  5. print s1,s2 
  6. # aGVsbG8gd29ybGQ=\n
  7. # hello world
  8. 注: 這是最簡單的方法了,但是不夠保險,因為如果別人拿到你的密文,也可以自己解密來得到明文;不過可以把密文字串進行處理,如字母轉換成數字或是特殊字元等,自己解密的時候在替換回去在進行base64.decodestring,這樣要安全很多。 
  9. 2. 第二種方法是使用win32com.client 
  10. import win32com.client 
  11. def encrypt(key,content): # key:金鑰,content:明文
  12.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  13.     EncryptedData.Algorithm.KeyLength = 5
  14.     EncryptedData.Algorithm.Name = 2
  15.     EncryptedData.SetSecret(key) 
  16.     EncryptedData.Content = content 
  17.     return EncryptedData.Encrypt() 
  18. def decrypt(key,content): # key:金鑰,content:密文
  19.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  20.     EncryptedData.Algorithm.KeyLength = 5
  21.     EncryptedData.Algorithm.Name = 2
  22.     EncryptedData.SetSecret(key) 
  23.     EncryptedData.Decrypt(content) 
  24.     str = EncryptedData.Content 
  25.     return str 
  26. s1 = encrypt('lovebread''hello world'
  27. s2 = decrypt('lovebread', s1) 
  28. print s1,s2 
  29. # MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq
  30. # GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx
  31. # lG7o
  32. # hello world
  33. 注:  這種方法也很方便,而且可以設定自己的金鑰,比第一種方法更加安全,如果對安全級別要求不太高的話這種方法是加密解密的首選之策! 
  34. 3. 還有就是自己寫加密解密演算法,比如: 
  35. def encrypt(key, s): 
  36.     b = bytearray(str(s).encode("gbk")) 
  37.     n = len(b) # 求出 b 的位元組數
  38.     c = bytearray(n*2
  39.     j = 0
  40.     for i in range(0, n): 
  41.         b1 = b[i] 
  42.         b2 = b1 ^ key # b1 = b2^ key
  43.         c1 = b2 % 16
  44.         c2 = b2 // 16# b2 = c2*16 + c1
  45.         c1 = c1 + 65
  46.         c2 = c2 + 65# c1,c2都是0~15之間的數,加上65就變成了A-P 的字元的編碼
  47.         c[j] = c1 
  48.         c[j+1] = c2 
  49.         j = j+2
  50.     return c.decode("gbk"
  51. def decrypt(key, s): 
  52.     c = bytearray(str(s).encode("gbk")) 
  53.     n = len(c) # 計算 b 的位元組數
  54.     if n % 2 != 0 : 
  55.         return "" 
  56.     n = n // 2
  57.     b = bytearray(n) 
  58.     j = 0
  59.     for i in range(0, n): 
  60.         c1 = c[j] 
  61.         c2 = c[j+1
  62.         j = j+2
  63.         c1 = c1 - 65
  64.         c2 = c2 - 65
  65.         b2 = c2*16 + c1 
  66.         b1 = b2^ key 
  67.         b[i]= b1 
  68.     try
  69.         return b.decode("gbk"
  70.     except
  71.         return"failed"
  72. key = 15
  73. s1 = encrypt(key, 'hello world'
  74. s2 = decrypt(key, s1) 
  75. print s1,'\n',s2  
  76. # HGKGDGDGAGPCIHAGNHDGLG
  77. # hello world
  78. 注: 這是網上抄來的一個簡單的例子,大家可以自定義自己演算法進行加密解密;還有許許多多複雜的加密演算法,大家可以自行查閱密碼學的相關演算法。 
  79. 4.對於python來說,也可以把python原始碼檔案編譯成pyc二進位制格式的檔案,這樣別人就看不到你的原始碼,也算是一種加密方法吧,方法如下: 
  80. 執行命令python -m py_compile create_slave.py 可以直接生成一個create_slave.pyc檔案,然後可以用create_slave.pyc來替換create_slave.py作為指令碼來執行。 

參考連結: