2015-04-16 35 views
8

當你編譯一個.java文件到.class文件,如果你有一個像如何防止人們在編譯的類文件中看到字符串文字?

String s = "This is a String" 

線如果你打開一個文本編輯器的.class文件,你會看到

This is a String 

文件中的某處在gobblety gook中。

對於大多數情況來說,這很好,並且不會在處理API密鑰等敏感信息時出現。

當然,一種替代方法是從另一個文件中讀取API密鑰,但這只是使EASIER能夠找到密鑰,因爲現在人們可以在打開.jar文件時打開「key.txt」 。

那麼如何加密.class文件中的字符串文字呢?

+1

最方便的方法是從您的代碼中刪除任何敏感信息,並將其存儲在某種(可能是加密的)存儲庫中。 – Rouby

+0

我有同樣的問題 - 當我反編譯別人的應用程序(Android的apk),這是第一個搜索和實際上導致反向工程的apk和理解反編譯的代碼 –

回答

0

即使您在課堂上加密了這些信息,黑客也只能從您的代碼中找到解密機制。因此,恕我直言,最好將這些加密信息保存在其他文件中,並閱讀該文件。另外,使用操作系統安全機制來限制對該文件的訪問。

1

如果將信息存儲在類文件中,則解密密鑰應該來自該類的外部。你可以隱藏數據,但是如果你在類文件中有所有的信息,你就會丟失。

您應該將API密鑰存儲在配置文件中。你有不同的API密鑰用於開發和現場直播,對嗎?

其他可能的解決方案是使用KeyStore,它允許您以公開訪問的格式存儲敏感信息。只有密鑰的持有者才能解密敏感數據。

+0

當暴亂批准應用程序時,我將有一個釋放鍵,現在我沒有,但是我現在的API密鑰現在無法處理大量使用權。 :P 無論哪種方式,當用戶在計算機上運行API密鑰和加密密鑰時,即使它們位於jar中的不同文件中,API密鑰和加密密鑰也會以相同的.jar文件結尾。 – CSDragon

6

當您將代碼發送給第三方時,您無法控制它。即使您將API密鑰嵌入到加密字符串的位置,攻擊者仍然可以嘗試,並有可能成功破解它,這將使您的所有加密/解密工作徒勞無功。

在我看來,最好的解決方案就是不在應用程序中提供任何敏感信息,而是給它提供某種類型的ID。它需要的任何敏感值將通過使用安全連接進行提取。

4

如果您使用密鑰訪問第三方API,則無法將密鑰從最終用戶保護如果您隨代碼/應用程序一起提供密鑰,或者希望應用程序能夠訪問第三方沒有中間人的API。

最終用戶只能讀取從您的應用發送到終點的所有數據並知道API密鑰。無論您採取什麼措施加密,您都需要至少將其解密後發送給第三方。

要做到這一點的安全方法是要求您的用戶登錄到您提供的服務,向您的服務發送請求,然後向您的服務發送請求(推測這不是您最終用戶的機器上)用密鑰向API發送請求。所以最終用戶從不知道密鑰。

相關問題