我们有一个应用程序,我们从其中一个产品设计工具中提取一些机密信息。所以我们使用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;
答案 0 :(得分:2)
Flash没有完全保护。您的密钥必须在代码中或在外部加载,并且在某些时候,任何足够坚定的人都能够获得它们。你所能做的就是让这个过程变得如此复杂,以至于不值得麻烦。
看看这个问题,了解如何让你的源更难以反编译和阅读:How to protect swf file from being decompiled?
答案 1 :(得分:0)
不要将您的数据作为url参数发送。发送邮件请求。
如果不可能,您可以尝试使用公钥实现方案。但要小心,你实施错误会导致更大的安全问题的可能性很高。