2017-04-26 195 views
0

我怎麼能像存儲認證密鑰API證書,谷歌地圖API密鑰安全,目前我已存儲在strings.xml.KeygenratorSpec憑證要求的最低23 API級別是有什麼辦法可以安全地存儲任何幫助會更有幫助我卡住了2天,但不知道。存儲API證書安全

回答

0

簡短的回答:你不能做到這一點。

較長的答案:你可以用混淆,從而使其難以找到API證書,但還是有人有足夠的時間和幾個技能會發現它並打破它。使用KeyGenerator也無濟於事。我假設你打算加密/解密API憑證。您仍然需要將密鑰存儲在應用程序中或由您的應用程序檢索。因此,同樣的問題仍然存在,在訪問您的憑證之前,只需要再找一個字符串。

混淆可能是你最好的機會。當然,這不是防彈的,但如果它足夠複雜,它可能會延誤或破壞試圖破壞應用程序的人。您可以使用proguard來混淆您的應用程序代碼(如果您不想支付更高級的東西),但不會混淆字符串。你將不得不使用其他技術。你可以在網上找到大量的例子,你也可以使用自己的模糊層次。我不認爲你會找到任何好的建議或標準來做到這一點。當然,不管你嘗試多麼努力,對於某個人來說,迴歸仍然是一個時間問題。

編輯:

這是配置proguard的一個很好的教程:http://wiebe-elsinga.com/blog/obfuscating-for-android-with-proguard/(小心你有,否則,當你生成一個APK你可能會崩潰)

關於字符串混淆,你可以使用類似於此的:https://github.com/efraespada/AndroidStringObfuscator但是,您仍然需要一些密碼,因此解密將成爲可能。如果將現有字符串與代碼混淆結合使用,則將現有字符串用作密碼(您已在應用程序中使用該字符串)。在各種文件/資源​​中隱藏部分字符串,並在想要創建字符串時將它們組合起來可能會增加更多混淆。但是,如果你讓它太複雜,可能很容易發現。例如,如果您的strings.xml僅包含1個加密字符串(不可讀),則很可能這是您嘗試保護的字符串。之後會導致這些信息。所以,在我看來,沒有最好的/好的做法。您可以通過網上找得到的一些想法,但我會建議你自己判斷哪裏是最好的(不太明顯)的方式來隱藏它,這取決於你的代碼和應用程​​序結構。但無論如何,這隻會欺騙沒有經驗/懶惰的攻擊者和自動化工具。

我經常做的另一件事是不允許的代碼的某些部分如果啓用調試運行時,或者當apk文件不會被自己的簽名。這些對策也不是防彈的,但可能會使懶惰的攻擊者失去活力。這裏是一個很好的指導如何做到這一點和其他事情:https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app

+0

@ jackgu1988你可以請提供任何示例鏈接,如果你有 –

+0

@HardikMehta請檢查更新的答案 – jackgu1988