2

我们有一个应用程序,我们从其中一种产品设计工具中提取一些机密信息。因此,我们使用 HTTPS 作为通道,并且我们在将请求参数和一些数据发送到 Web 服务之前对其进行加密。所以,一切似乎都很好。

但是当我们给应用程序进行安全审计时,他们发现我们已经在源代码中硬编码了加密密钥。他们使用 Sothink SWF Decompiler 来查看我的 SWF 文件。他们抓住了钥匙并对此表示担忧。

我们使用 Flex 3(SDK 3.4) 开发了这个应用程序。有没有最好的方法来使用密钥而不在源代码中进行硬编码。如果有人遇到这种问题,请告诉我。

任何人,请建议我在不进行硬编码的情况下使用 SourceCode 中的密钥的最佳方法。

这是我的示例代码:

var currentResult:String = "";
        var strDataToEncrypt:String = "";
        var kdata:ByteArray;

        var todayDate:Date = new Date();

        kdata = Hex.toArray(Hex.fromString("secretKey here"));
        strDataToEncrypt =username.toUpperCase() + "#$#" + password + "#$#"  + todayDate.getTime().toString();          
        var data:ByteArray;
        data = Hex.toArray(Hex.fromString(strDataToEncrypt))
        var name:String = "des3-ecb";
        var pad:IPad = new PKCS5; 
        var mode:ICipher = Crypto.getCipher(name, kdata, pad);
        pad.setBlockSize(mode.getBlockSize());
        mode.encrypt(data);
        currentResult = Base64.encodeByteArray(data);
        var token:String = currentResult;
4

2 回答 2

2

Flash 没有完全的保护。您的密钥必须在代码中或从外部加载,并且在某些时候,任何有足够决心的人都可以得到它们。你所能做的就是让这个过程变得如此复杂,以至于不值得麻烦。

查看这个问题,了解如何使您的源代码更难反编译和阅读:如何保护 swf 文件不被反编译?

于 2011-04-12T08:20:23.580 回答
0

不要将您的数据作为 url 参数发送。将其与发布请求一起发送。

如果那不可能,您可以尝试使用公钥实施方案。但要小心,你实施错误的可能性很高,这会导致更大的安全问题。

于 2011-04-12T08:18:13.170 回答