我是一個初學java程序員。我正在研究解密一些數據的應用程序。 解密密鑰被硬編碼到軟件中,因此可以通過分析字節碼來查看。如何保護解密密鑰免遭反編譯?
我知道逆向工程不可能完全被阻止,所以我想要做的是儘可能地讓這個過程變得困難。
我的想法不是直接將密鑰放入我的代碼中,而是讓它通過某種轉換。 例如,我可以寫 -
private static final byte[] HC256A = Hex
.decode("8589075b0df3f6d82fc0c5425179b6a6"
+ "3465f053f2891f808b24744e18480b72"
+ "ec2792cdbf4dcfeb7769bf8dfa14aee4"
+ "7b4c50e8eaf3a9c8f506016c81697e32");
這樣,有人在看字節碼不能讀它,立竿見影。但是必須遵循邏輯並對其應用轉換,在字節級別上這不會更容易。
那麼你們怎麼看?這有用嗎?除十六進制解碼之外,什麼可能是最好的轉換? 是否有其他方法可用來保護硬編碼的解密密鑰?
感謝您的所有建議。
您可以偵聽連接的調試器(以C++工作,不知道如何在Java中執行該操作),如果是這樣,請從內存中刪除該值。 – 2011-05-20 09:30:56
正在解碼的數據的靈敏度是什麼?這將有助於爲保護數據付出多少努力提供指導。隱藏字節碼中任何形式的密鑰都相對容易失敗。此外,這需要軟件的每個用戶擁有相同的密鑰,並且需要重新編譯才能更改密鑰。 – 2011-05-21 06:50:56
數據非常敏感。這是一個數字媒體印刷品,如果泄漏會給公司帶來嚴重問題。 – 2011-06-17 13:44:23