預設: 我們已經將國際郵件資源加密成jar文件。 我們使用ResourceBundle.getBundle(BUNDLE_NAME)加密之前得到消息資源。如何獲得加密的資源包?
問題: 我怎樣才能閱讀賈裏德後的信息資源都resouces到一個文件?
預設: 我們已經將國際郵件資源加密成jar文件。 我們使用ResourceBundle.getBundle(BUNDLE_NAME)加密之前得到消息資源。如何獲得加密的資源包?
問題: 我怎樣才能閱讀賈裏德後的信息資源都resouces到一個文件?
我看到兩種可能性:
加載它自己: 當完整的資源文件是加密的,你需要處理它的加載自己。 由於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)
注入資源包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){
...
}
}
如果安全是非常重要的,你可能不希望存儲真正的密碼,但使用令牌源自您的原始密碼。