2012-08-30 228 views
2

我需要隱藏源代碼中的密碼,爲了降低反編譯風險,可能有哪些混淆密碼的方法?在Java源代碼中隱藏密碼

例如

final String password = "secret"; 
+3

爲什麼密碼在源代碼中硬編碼?是否沒有辦法將其外部化? – Lloyd

+1

@Lloyd這是雞和雞蛋的問題,如果你將它外化,可能存儲在一個加密的配置文件中,你仍然需要一個密鑰來解密它? – Howard

+0

一個重要的問題是它是一種什麼樣的應用程序,特別是它將如何部署?桌面?移動?Web? –

回答

4

首先,我不會的名字我的變量password

其次,我不會保留原始格式,但編碼它。第三,我使用char[]而不是String(因爲字符串駐留在字符串池中)。

當然最好的選擇是不把它放在代碼中。

+1

但是不會ProGuard改變變量名嗎? – AutoM8R

13

不要打擾。

無論如何,您的普通用戶將無法或不願意反編譯類文件,並且當目標是單個數據時,動機和熟練的攻擊者不會因混淆而被阻止。所需要的只是一個這樣有動力和技能的攻擊者,全世界都知道密碼。

如果您的安全性取決於模糊密碼,您已經丟失。

0

加密使用外部方法的密碼,可以使用解密代碼內和代碼存儲密碼(加密)

0

使用數據庫或文件以保存pasword的方法。這裏有相當不錯的例子post。 但是您仍然需要在某處存儲一個主密碼來加密您的密碼。 Tt很難保護它免遭被發現和誤用來解密你的密碼:(。