2014-09-13 16 views
1

我正試圖在我的MCU設備(Cortex M3 STM32f102控制器)和我的Java應用程序服務器之間建立加密連接。當我使用純文本而不加密時,所有工作都正常。 問題是,當我使用加密(我的服務器上的AES/CBC/PKCS5PADDING)時,我收到消息時出現BadPaddingException錯誤。當我看着參數表爲MCU的加密庫只見提及,即用於java的AES CS2Padding

  • 在CBC模式中,並在呼叫其中P_inputSize大於16,而不是16的倍數 的情況下,密文竊取將被激活。見<的CBC-CS2 「SP 800-38 A - 補遺」> NIST SP 800-38A附錄
  • 我認爲這個問題是在不同的填充算法控制器和服務器。

    是否有一些AES/CBC與CS2填充Java的填充? 或者你會如何推薦我解決這個問題?


    正如下面的帖子所建議的,我將我的加密改爲AES \ CTR \ NoPadding,現在它可以工作。

    +0

    我可以提出一個改變:從CS2Padding到CTS模式或類似模式。我不認爲我曾經遇到過'CS2Padding'。我想更多的人會認識到'CTS模式'。 – jww 2014-09-13 11:39:58

    +0

    @jww尼斯點,我需要嘗試這個 – Asprelis 2014-09-13 11:47:34

    +0

    JCE支持CTS模式,但它並沒有真正把它定義在我能找到的任何地方。我會嘗試類似'Cipher.getInstance(「AES/CTS/NOPADDING」)' – 2014-09-13 14:13:52

    回答

    0

    按照下面的帖子中的建議,我將我的加密改爲AES \ CTR \ NoPadding,現在它可以工作。