2013-10-05 2 views
0

Я разрабатываю игру, и мне нужно сохранить некоторые файлы данных, которые будут хранить защищенные данные, моя цель в том, что никто не сможет читать/редактировать файл, я закодировал простую манипуляцию байтом algorthim:Простой шифрование

private static final int KEY = 25156; 

public static String encrypt(String s) { 
    byte[] bytes = s.getBytes(); 
    for (int i = 0; i < bytes.length; i++) 
     bytes[i] = (byte) (bytes[i] + KEY); 
    return new String(bytes); 
} 

public static String decrypt(String s) { 
    byte[] bytes = s.getBytes(); 
    for (int i = 0; i < bytes.length; i++) 
     bytes[i] = (byte) (bytes[i] - KEY); 
    return new String(bytes); 
} 

Строка не читаемый, но у меня есть несколько вопросов:

  1. Может ли это решить мою проблему?
  2. Если нет, что еще можно решить?
+0

Обратите внимание, что значение «ключ» будет интерпретироваться по модулю 256, что означает это эквивалентно 68. И это невероятно простой, неискушенный код, который любой, у кого есть понимание, может «взломать». Это не позволит наивному пользователю прочитать файл, но это все. –

+1

Если «никто не сможет читать/редактировать файл», вы имеете в виду «никто не может удобно читать/редактировать файл», да, это решит вашу проблему. Если вы имеете в виду «никто, в том числе правительственные агентства безопасности или другие криптографические специалисты, которые смогут читать/редактировать файл», вам понадобится гораздо более изощренность. Можете ли вы быть более конкретным в своем вопросе? – Simon

+1

Реальность заключается в том, что определенный атакующий сможет расшифровать ваши файлы, если все ключи кода/шифрования являются локальными (что я предполагаю, что они будут). Если вы после достаточно приемлемого алгоритма, посмотрите на пакет javax.crypto, который позволит вам шифровать данные с помощью ключа, встроенного в ваш код, чтобы кто-то должен был декомпилировать ваш код, чтобы иметь возможность расшифровать. –

ответ

0

Могу ли я предложить шифрование XOR?

для кодирования и декодирования:

public static String crypt(String s) { 
    byte[] bytes = s.getBytes(); 
    for (int i = 0; i < bytes.length; i++) 
     bytes[i] = (byte) (bytes[i]^KEY); 
    return new String(bytes); 
} 

Вызов crypt("foo") будет шифровать. Если вы снова позвонить склепа, он будет расшифровывать: crypt(crypt("foo")) // returns "foo"

рандомизации это немного больше, вы могли бы начать бросать в других переменных:

bytes[i] = (byte) (bytes[i]^KEY^i^bytes.length); 
+0

Просто проверил, что такое xor, как я могу реализовать это в java? – Orel

+0

Это не по своей сути отличается от его схемы - возможно, даже немного менее безопасным. –

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