我正在執行c中的AES算法,從aes encryption program 也是我們用java編寫的AES程序,發生加密數據時發生的問題都不一樣。 輸入文本:358960040119672 鍵:mlabs不同的加密文本是由相同的AES算法生成的嗎?
輸出: 1. java的(機器人): 「vcpBspcYHtjlMgbQJI3aWg ==」 被C 2:「`AC©õ#«0Z」÷> Y」
爲什麼這個特殊字符,在C示。如何處理此??
我正在執行c中的AES算法,從aes encryption program 也是我們用java編寫的AES程序,發生加密數據時發生的問題都不一樣。 輸入文本:358960040119672 鍵:mlabs不同的加密文本是由相同的AES算法生成的嗎?
輸出: 1. java的(機器人): 「vcpBspcYHtjlMgbQJI3aWg ==」 被C 2:「`AC©õ#«0Z」÷> Y」
爲什麼這個特殊字符,在C示。如何處理此??
加密後Java輸出已經用Base64算法編碼,而C沒有。
現在我將c的加密輸出轉換爲base64(Base64Encode()),但它們仍然不相同。 – user1196792
現在在c加密的輸出是:YMTnFakWÌSOrMFoi – user1196792
@ user1196792:該輸出甚至不是一個完整的AES塊大小,所以你做錯了什麼。 – caf
問題可能蒙山填充和轉化率。將數據轉化爲字節,(例如十六進制),因爲128位加密結果是18個八比特組任何值(甚至不可打印的ASCII字符)。確保雙面使用相同的填充。
AES 128位定義爲CHIPERTEXT [16個八比特組] = AES(KEY [16個八位字節],PLAIN [16個八位字節))),並且沒有約定使用字符串。
這個問題與Android有什麼關係? – Egor
如果我發送由c代碼生成的加密數據到java(android)來解密,那麼由於它的特殊字符,在解密中存在問題。 – user1196792
除了明顯的base64差異之外,這裏還有很多未解答的問題。使用什麼密鑰生成算法? (「mlabs」不能成爲實際的密鑰,因爲它不夠長。密碼/密碼短語通常被散列以產生實際的密鑰。)雙方都使用ECB嗎? –