我是一个初学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