我想實現一個SOAP客戶端應該接收消息(XML)與MTOM/XOP附件。郵件正文和附件使用單獨的密鑰進行加密。所使用的加密算法是AES128-CBC。正文是base64編碼和解密很好,但附件是二進制的,並有奇數長度(530字節,527字節等)。AES128-CBC加密可以產生奇數長度的輸出嗎?
我的問題是,有沒有可能是服務器搞亂了加密?或者有可能產生不是16的倍數的AES128輸出?
我想實現一個SOAP客戶端應該接收消息(XML)與MTOM/XOP附件。郵件正文和附件使用單獨的密鑰進行加密。所使用的加密算法是AES128-CBC。正文是base64編碼和解密很好,但附件是二進制的,並有奇數長度(530字節,527字節等)。AES128-CBC加密可以產生奇數長度的輸出嗎?
我的問題是,有沒有可能是服務器搞亂了加密?或者有可能產生不是16的倍數的AES128輸出?
AES in CBC模式將始終產生16字節倍數的輸出。
如果AES用於CTR (Counter) mode)它產生與輸入長度相同的輸出。
AES是一種分組密碼,可與一次16字節數據的16字節塊一起使用。對於CBC模式,輸入和輸出必須是16字節的倍數。 CTR模式沒有這個要求。
解決方法是在加密之前向輸入添加填充字節,並在解密後將其刪除。這可以通過指定填充類型自動完成,通常爲PKCS#7 padding。
謹慎解釋downvote? –
這就是我的想法。所以加密不是在CBC模式下,或者它們不包括加密消息的所有位。我不知道誰低估了你的答案,我給了你一個贊成票。 – andrei