2013-04-26 4 views
0

Преобладание: Мы зашифровали ресурсы международных сообщений в файле jar. Мы используем ResourceBundle.getBundle (BUNDLE_NAME), чтобы получить ресурс сообщения до шифрования.Как получить зашифрованный пакет resouce?

Задача: Как я могу прочитать ресурсы сообщений после того, как все ресурсы были повторно загружены в файл?

ответ

0

Я вижу две возможности:

  1. Загрузить это самостоятельно: Когда файл полный ресурс зашифрован нужно обрабатывать загрузку этого самостоятельно. Поскольку Jar-файлы - это только почтовые пакеты, вы можете извлечь любой контент. Таким образом, вы можете читать и расшифровывать правильный файл свойств, а затем загружать его как ResourceBundle. Смотрите следующую 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. впрыснуть ResourceBundle Proxy: Если вы только шифровать значение свойств файла, вам может придерживаться ResourceBundle.getBundle (BUNDLE_NAME). Теперь он будет возвращать мусор, поскольку строки зашифрованы. Таким образом, вы просто обернуть ResourceBundle в пользовательский прокси для расшифровки значения: пример

Использование:

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){ 
     ... 
    } 

} 

Если безопасность важна, вы, вероятно, не хотите сохранить реальный пароль, но используя маркеры, полученное от оригинальный пароль.

Смежные вопросы