2013-04-26 60 views
0

預設: 我們已經將國際郵件資源加密成jar文件。 我們使用ResourceBundle.getBundle(BUNDLE_NAME)加密之前得到消息資源。如何獲得加密的資源包?

問題: 我怎樣才能閱讀賈裏德後的信息資源都resouces到一個文件?

回答

0

我看到兩種可能性:

  1. 加載它自己: 當完整的資源文件是加密的,你需要處理它的加載自己。 由於jar文件只是壓縮包,你可以提取任何內容。所以,你可以閱讀和解密正確的屬性文件,然後加載它作爲資源包。 請參閱下面的LIB訪問罐子資源: https://github.com/IsNull/archimedesJ/blob/master/src/archimedesJ/util/PackageUtil.java 而下面的策略來加載正確的文件: http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String%2C%20java.util.Locale%2C%20java.lang.ClassLoader)

  2. 注入資源包Proxy: 如果只加密該文件的屬性值,你能堅持到ResourceBundle.getBundle(BUNDLE_NAME)。現在,它會在字符串被加密時返回垃圾。所以,你只是包裝資源包中的自定義代理解密值:

用例:

ResourceBundle mybundle = new EncryptedResourceBundle(ResourceBundle.getBundle(BUNDLE_NAME), "mypassword"); 

您定義EncryptedResourceBundle爲ResourceBundle的子類和代理所有的公共方法,並將其重定向到底層原創。覆蓋「的getString」的方法爲好,但現在你可以透明地解密的飛行返回值:

public class EncryptedResourceBundle extends ResourceBundle 
    private final ResourceBundle original; 
    private final String password; 

    public EncryptedResourceBundle(ResourceBundle original, String password){ 
     this.original = original; 
     this.password = password; 
    } 

    ... // proxy all public methods here 

    @Overwrite 
    public String getString(String key){ 

     String encrypted = original.getString(key); 

     return decrypt(encrypted, password); 
    } 

    private String decrypt(String data, String password){ 
     ... 
    } 

} 

如果安全是非常重要的,你可能不希望存儲真正的密碼,但使用令牌源自您的原始密碼。