как "смешать" два числа в одну шестнадцатеричную строку - PullRequest
0 голосов
/ 02 декабря 2009

Как сгенерировать код из двух чисел, чтобы, когда вы знали этот код и одно из чисел, вы могли расшифровать второе число? Например, у вас есть два числа: 983 и 2303, и вы «смешиваете» его в шестнадцатеричную строку следующим образом: 4b17a190bce4ea32236b98dd. Когда вы знаете первое число и эту шестнадцатеричную строку, вы можете расшифровать второе число. Но когда вы знаете второе число и шестнадцатеричную строку, вы не можете расшифровать первое число. Как это сделать?

Ответы [ 4 ]

1 голос
/ 02 декабря 2009

Самый простой и действительно НЕ БЕЗОПАСНЫЙ (как в случае с легким взломом любой, уделяющий немного внимания) способ сделать это:

 int number1;
 int number2;
 int key;

 //encode  (we know number1 and number2 and we want to know the key)
 number1 = 983;
 number2 = 2303;
 key = number1 ^ number2;

 //decode  (we know number1 and the key and we want to know number2)
 number1 = 983;
 number2 = key ^ number1;

Еще раз (чтобы избежать отрицательных голосов). Этот метод взломан в считанные секунды любым, кто садится за него. Он работает для невежественных пользователей (без понятия, как в математике, без программирования).

0 голосов
/ 09 декабря 2009

ENCRYPTION:

  1. SHA1-хэш первого числа

    Это дает 20-байтовый вывод (или шестнадцатеричную строку из 40 символов, если вы предпочитаете).

  2. Используйте этот хэш для создания ключа AES (например, используйте первые 16 байтов для получения 128-битного ключа).

  3. AES-шифрование строки: (в вашем примере 983: 2303) с использованием этого производного ключа [Использовать шифрование AES CBC]

  4. Выходными данными будет шестнадцатеричная строка из 32 символов

РАСШИФРОВЫВАНИЕ:

  1. Шаг 1 и 2, как указано выше:

    Примечание. Это возможно только при наличии первого номера, а не второго

  2. AES-дешифрование входной шестнадцатеричной строки

    Это дает:

  3. Ответ - число после двоеточия.

0 голосов
/ 02 декабря 2009

В питоне:

hash = 0x4b17a190bce4ea32236b98dd # hash
input = 983
output = 2303

#k = hash - (input * output)
k = 23239944001398166727313395124

def decode(hash, input):
  return (hash - k) / input

def encode(input, output):
  return '%x' % (k + (input * output))

print k, decode(hash, input), encode(input, output)
0 голосов
/ 02 декабря 2009

Вам нужно что-то вроде XOR: вы записываете два числа и сохраняете результат и одно из них. Затем вы присваиваете результат полученному номеру и получаете другой номер обратно. Конечно, не все операции подойдут для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...