如何混淆加密函数的密钥?

CJ7*_*CJ7 3 encryption obfuscation cryptography decompiling

如果加密函数需要密钥,那么如何对源中的密钥进行模糊处理以使反编译不会泄露密钥从而启用解密?

Eug*_*its 5

答案在很大程度上取决于平台和开发工具,但总的来说没有可靠的解决方案.加密函数是密钥必须以"自然"形式存在的点.因此,黑客需要做的就是将断点放在那里并转储密钥.甚至没有必要反编译任何东西.因此,任何混淆只对新手有用,或者无论出于何种原因无法进行调试.使用应用程序中存在的文本字符串作为键是变体之一.

但最好的方法当然不是把钥匙放在里面.根据您的使用场景,您有时可以使用某些系统信息(例如智能手机的IMEI)作为密钥.在其他情况下,您可以在安装应用程序时生成密钥,并将该密钥存储为应用程序数据的组成部分(例如,使用数据库的列名作为密钥或类似名称).

尽管如此,如果可以运行调试器,所有这些都被跟踪相对容易.

有一点可以抵消调试 - 卸载解密到第三方.这可以通过使用外部密码设备(USB cryptotoken或智能卡)或通过调用Web服务来解密某些信息部分来完成.当然,这些方法也仅适用于一组有限的场景.