Python字串加密解密方法總結

來源:互聯網
上載者:User

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

 

本文出自 “王偉” 部落格,請務必保留此出處http://wangwei007.blog.51cto.com/68019/1108784

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.