解決AES算法BCB模式加密文件在解密後出現亂碼問題

我使用AES算法BCB模式對文件加密後再對其進行解密,在解密文件中出現了亂碼狀況,與被加密文件不一致,一般都是前十幾個字節是亂碼,後來查找了相關資料才解決了該問題。如下是解決方法:python

對於CBC模式的AES加密,下面的代碼decrypt後沒法獲得原始的data(輸出亂碼),具體緣由見這個帖子,能夠理解爲加密過程當中obj對象的狀態會變化,致使直接用它來解密的話會失效算法

 

  
  
  
  
  1. from Crypto.Cipher import AES 
  2.  
  3. PADDING = '\0' 
  4. pad_it = lambda s: s+(16 - len(s)%16)*PADDING 
  5.  
  6. if __name__ == "__main__":  
  7.     key = '1234567890123456' 
  8.     data = 'qwertyuiopasdfgh' 
  9.     obj = AES.new(key, AES.MODE_CBC)     
  10.     crypt = obj.encrypt(data)   
  11.     print crypt   
  12.     recovery = obj.decrypt(crypt)  #有問題   
  13.     print recovery   

須要改爲以下代碼:ide

  
  
  
  
  1. from Crypto.Cipher import AES   
  2.     
  3. PADDING = '\0'   
  4. pad_it = lambda s: s+(16 - len(s)%16)*PADDING      
  5. if __name__ == "__main__":   
  6.     key = '1234567890123456'   
  7.     data = 'qwertyuiopasdfgh'   
  8.     obj = AES.new(key, AES.MODE_CBC)   
  9.     crypt = obj.encrypt(data)   
  10.     print crypt   
  11.     obj2 = AES.new(key, AES.MODE_CBC)   
  12.     recovery = obj2.decrypt(crypt)   
  13.     print recovery 

ECB模式沒有這個問題,由於他不是block chaining的ui

 

原文地址:http://teloon.tiddlyspot.com/google

相關文章
相關標籤/搜索