Шифрование/ Дешифрование Файлов

Шифрование/ Дешифрование Файлов 1.1

Нет прав для скачивания
Версия(и) Minecraft
1.7+
Простое шифрование и последующее дешифрование текстур для Вашего проекта.

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

Решил немного переделать под себя, чтобы было удобней пользоваться и создал небольшую программу. Первым делом указываете путь к директории, после ключ (цифры в кол-ве от 1 до 10), который будет использоваться для шифрования и последующего дешифрования файла.

После криптования изображений нужно сделать что?
Дешифровать и загрузить их в нашу любимую игру.
[!] Для этого мы создадим для удобства отдельный класс, где будем хранить наши текстуры:
_Resources:
public class _Resources {

    public static ResourceLocation clanMenuBckg;
}

Сам процесс будет происходить следующим образом:
  • В пре-инициализации мы создаём пустую папку.
  • В инициализации подгружаем текстуры.
  • И сразу же после аплоада текстур мы эту самую папку и удаляем.

[!] Для этого в ClientProxy создадим 3 метода createTempDir, deleteTempDir, loadTexture:
Java:
    public void createTempDir() {
        File file = new File(dir + "/temp");
        if (!file.isDirectory()) {
            file.mkdirs();
        }
    }

    public void deleteTempDir() {
        File file = new File(dir + "/temp");
        for (File myFile : file.listFiles()) {
            if (myFile.isFile()) myFile.delete();
            file.delete();
        }
    }

    public ResourceLocation loadTexture(String path, String texture) throws FileNotFoundException, IOException {
        int key = decryptKey;

        FileInputStream fis = new FileInputStream(dir + "/textures/" + path + texture + ".png");

        byte data[] = new byte[fis.available()];

        fis.read(data);
        int i = 0;

        for (byte b : data) {
            data[i] = (byte) (b ^ key);
            i++;
        }

        FileOutputStream fos = new FileOutputStream(dir + "/temp/" + texture + ".png");

        fos.write(data);
        fos.close();
        fis.close();

        String texturePathStr = dir + "/temp/" + texture + ".png";
        Path externalPath = Paths.get(texturePathStr);
        ResourceLocation decryptTexture = null;
        if (Files.exists(externalPath))
            decryptTexture =
                    Minecraft
                    .getMinecraft()
                    .getTextureManager()
                    .getDynamicTextureLocation(texture, new DynamicTexture(ImageIO.read(new File(texturePathStr))));

        return decryptTexture;
    }

После, в методе пре-Инициализации вызываете метод создания временной папки, который будет хранить Ваши текстуры.
В методе инициализации подгружаете сами текстуры и в конце удаляете временную папку.

В конце концов Ваш ClientProxy должен выглядеть так:
ClientProxy:
public class ClientProxy extends CommonProxy {

    String dir = "justtest"; // Директория, которую вы создаёте в run

    int decryptKey = 000000000; // Ваш ключ, который Вы указывали в программе

    @Override
    public void preInit(FMLPreInitializationEvent event) {
        super.preInit(event);

        createTempDir(); // Создаём временную папку
    }

    @Override
    public void init(FMLInitializationEvent event) {
        super.init(event);

        try {
            _Resources.test = loadTexture("test/", "texture"); // Загружаем нашу текстуру
        } catch (IOException e) {
            e.printStackTrace();
        }

        deleteTempDir(); // Удаляем временную папку
    }

    @Override
    public void postInit(FMLPostInitializationEvent event) { super.postInit(event); }

    public void createTempDir() {
        File file = new File(dir + "/temp");
        if (!file.isDirectory()) {
            file.mkdirs();
        }
    }

    public void deleteTempDir() {
        File file = new File(dir + "/temp");
        for (File myFile : file.listFiles()) {
            if (myFile.isFile()) myFile.delete();
            file.delete();
        }
    }

    public ResourceLocation loadTexture(String path, String texture) throws FileNotFoundException, IOException {
        int key = decryptKey;

        FileInputStream fis = new FileInputStream(dir + "/textures/" + path + texture + ".png");

        byte data[] = new byte[fis.available()];

        fis.read(data);
        int i = 0;

        for (byte b : data) {
            data[i] = (byte) (b ^ key);
            i++;
        }

        FileOutputStream fos = new FileOutputStream(dir + "/temp/" + texture + ".png");

        fos.write(data);
        fos.close();
        fis.close();

        String texturePathStr = dir + "/temp/" + texture + ".png";
        Path externalPath = Paths.get(texturePathStr);
        ResourceLocation decryptTexture = null;
        if (Files.exists(externalPath))
            decryptTexture =
                    Minecraft
                    .getMinecraft()
                    .getTextureManager()
                    .getDynamicTextureLocation(texture, new DynamicTexture(ImageIO.read(new File(texturePathStr))));

        return decryptTexture;
    }
}

Я думаю, что было всё ясно и понятно. По сути такая мелочь, но бывает временами очень полезна.
Как хранить ключ - решать Вам.

На последок можно и анекдот от Олега Шпагина:
Сколько нужно программистов, чтобы открутить лампочку?
- 0, потому что программисты лампочки не откручивают!
Автор
xmafee
Скачивания
20
Просмотры
1,454
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя xmafee

Последние обновления

  1. Обновление 1.1

    Удалена поддержка JavaFX. Вырезаны лишние части кода / Исправлены некоторые некорректные...
Сверху