2013-12-08 29 views
0

在Python腳本我需要解密通過AES128-CBC-PKCS7如何使M2Crypto與aes128-cbc-pkcs7一起使用?

Problem with M2Crypto's AES答案覈對例如加密的數據,但它描述了AES128-CBC和我不知道如何將其用於AES128-CBC-PKCS7

我只有一個關鍵:

key = 'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgHdH2zoKQJ43olhVZstEiBHjZvhUkGL1YcB2baSlHsHjoV5uRkYDyPEHUaN7htski3aGoIUY1vEF7nv0dJaM686KqEfkIxzlRizdnNJr+A8j1OOnOPOooqTuf06570kEEqXCW2STlLIMxwIESPHXAqiKYMPUtNGfu+PpmdY6NUHDAgMBAAE=' 

key = """MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgHdH2zoKQJ43olhVZstEiBHjZvhU 
kGL1YcB2baSlHsHjoV5uRkYDyPEHUaN7htski3aGoIUY1vEF7nv0dJaM686KqEfk 
IxzlRizdnNJr+A8j1OOnOPOooqTuf06570kEEqXCW2STlLIMxwIESPHXAqiKYMPU 
tNGfu+PpmdY6NUHDAgMBAAE=""" 

我不知道如何存儲鍵入正確的方式 - 有線剎車或無剎車。

能否請您提供一些例子,如何使用AES128-CBC-PKCS7編碼/解碼,應該是類似於AES128-CBC

對不起(在Problem with M2Crypto's AES解釋)如果問題聽起來很奇怪,我總新手在密碼學中。

+1

首先,您需要與創建密文的人交談,並向他解釋您需要有關使用的協議的更多信息。你需要知道編碼,字符編碼,IV處理等等,然後才能加密任何數據。只是想嘗試一下就不會結束。獲得該協議的正式說明! –

回答

2

如果您已獲得RSA公鑰,則不能使用僅使用AES進行加密。您需要使用混合加密:生成16,24或32字節的隨機AES密鑰,然後進行加密。如果您爲每次加密生成新的AES密鑰,則可以保持爲零。

AES密鑰本身可以使用您提供的公鑰進行加密,使用OAEP或 - 向後兼容性 - PKCS#1 v1.5 padding

如果我正確地閱讀文檔,默認模塊似乎不使用填充。我發現一個填充/去填充常規上pastebin,要感謝彼得共享:

def pkcs7_pad(data, blocksize=16): 
    padlen = blocksize - len(data) % blocksize 
    return data + bytes([padlen]) * padlen 


def pkcs7_unpad(data, blocksize=16): 
    if data: 
     padlen = data[-1] 
     if 0 < padlen < blocksize: 
      if data.endswith(bytes([padlen]) * padlen): 
       return data[:-padlen] 

    raise ValueError('incorrect padding') 

請注意,如果你正在使用這個通信信道上只是加密是不安全的。即使您只需要明文的機密性,也需要添加消息認證碼(MAC)。錯誤地使用CBC模式加密可能會使協議容易受到填充oracle攻擊的影響。

+0

你最後一句話是相當具有誤導性的。這些問題與AES128-CBC有關,這只是一個密碼,仍然可以安全使用。 Oracle攻擊無法在密碼環境中解釋。 有些協議(例如TLS的某些版本)提供了可用於該攻擊的oracle,因此這些協議是易受攻擊的。但是,這是給定協議的弱點,它與密碼無關,在正確使用時仍然安​​全。 – bakcsa83

+1

@ bakcsa83對,稍微修改答案以考慮到這一點。我認爲給出這個問題(兩個不同的運行時間,自我寫作的無填充例程),警告當然是有序的;攻擊的細節是讀者必須考慮的事情。 –

相關問題