Можно ли зашифровать n-значный номер, возвращая уникальный n-значный номер? - PullRequest
0 голосов
/ 06 июня 2018

StackOverflow предупреждает меня о том, что за этот вопрос меня могут понизить, но я был бы признателен за то, что вы этого не делаете, поскольку я публикую это просто, чтобы попытаться понять задание по программированию, с которым я столкнулся, и над которым яНекоторое время я был озадачен.

Я делаю несколько упражнений по кодированию javascript, и одним из заданий было разработать «функцию шифрования», encipher, которая зашифровывает 4-значное число путем умноженияэто число достаточно низкое, так что ни одна из его цифр не превышает 9, так что возвращается четырехзначное число.Таким образом,

encipher(0204)

может дать

0408

, где множитель был бы 2.- Это очень простой материал, просто чтобы попрактиковаться в Javascript.- Но, насколько я понимаю, возвращенные числа никогда не могут быть расшифрованы (что является следующей частью упражнения).Даже если вы храните словарь, внутренний для encipher, вдоль линий

{'0408':'2'}, etc

, чтобы вы могли выполнить поиск по 0408 и вернуть 0204, эти записи не могут бытьуникальный.Например, если бы один получил расшифровку числа 9999, он никогда бы не узнал, было ли исходное число 9999 (умноженное на 1), 3333 (умноженное на 3) или 1111 (умноженное на 9).Это верно?Я понимаю, что это довольно глупая и искусственная проблема, но я пытаюсь понять, если инструкции к упражнению не совсем верны, или я что-то упускаю.Вот исходная проблема:

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

Оставив упражнение позади, я 'Мне просто любопытно, существует ли какой-либо способ «зашифровать» (когда я говорю «зашифровать», я имею в виду на умеренном уровне JavaScript, поскольку я не специалист по криптографии) n-значное число и вернуть уникальное n-значное число?

Спасибо за любые идеи. -

1 Ответ

0 голосов
/ 06 июня 2018

зашифровывает 4-значное число, умножая его на достаточно низкое число, чтобы ни одна из его цифр не превышала 9, так что возвращается 4-значное число

Если ваш ввод9999, нет целых чисел, кроме 1 или 0, на которые вы можете умножить свой ввод и получить положительное число с максимум 4 цифрами.Следовательно, не существует решения, которое включало бы только целочисленное умножение.Тем не менее, целочисленное умножение может использоваться как часть алгоритма, такого как вращающиеся цифры (см. Ниже).

Если вместо этого вы ищете какой-то биективный алгоритм (тот, который однозначно отображает A в B и B вA), вы можете посмотреть на что-то вроде поворота цифр влево или вправо, изменения порядка цифр или использования уникального сопоставления каждой отдельной цифры другой.Они также могут быть смешаны.

Примеры

Поворот

1234 -> 2341

Реверс

1234-> 4321

Переопределить цифры, например, 2 сопоставлены с 8, 3 сопоставлены с 1

2323 -> 8181

Обратите внимание, что ни один из этих методов не является криптографически обоснованным для шифрования информации,но они, кажется, более или менее соответствуют целям упражнения.

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