РЕДАКТИРОВАТЬ: теперь сообщение основного сообщения о движении в http://messymatters.com/sealedbids
Идея rot13 заключается в том, чтобы скрывать текст, например, для предотвращения спойлеров. Это не должно быть криптографически безопасным, но просто убедитесь, что только люди, которые уверены, что они хотят его прочитать, прочтут его.
Я хотел бы сделать что-то подобное для чисел, для приложения с закрытыми ставками. Примерно я хочу отправить кого-то своему номеру и доверять им, чтобы выбрать свой номер, не затронутый моим, но тогда они должны быть способны выявить мою (чисто клиентскую), когда они будут готовы. Они не должны требовать от меня или третьих лиц дополнительного ввода.
(Добавлено: обратите внимание на предположение, что получателю доверяют не обманывать.)
Это не так просто, как rot13, потому что некоторые числа, такие как 1 и 2, будут повторяться достаточно часто, чтобы вы могли вспомнить, что, скажем, 34.2 действительно 1.
Вот что я ищу специально:
Функция seal(), которая отображает действительное число в действительное число (или строку). Он не должен быть детерминированным - печать (7) не должна отображаться на одно и то же каждый раз. Но соответствующая функция unseal() должна быть детерминированной - unseal (seal (x)) должно равняться x для всех x. Я не хочу, чтобы печать или вскрытие вызывали любые веб-сервисы или даже получали системное время (потому что я не хочу принимать синхронизированные часы). (Добавлено: Хорошо, чтобы предположить, что все ставки будут меньше некоторого максимума, известного всем, скажем, миллион.)
Проверка работоспособности:
> seal(7)
482.2382 # some random-seeming number or string.
> seal(7)
71.9217 # a completely different random-seeming number or string.
> unseal(seal(7))
7 # we always recover the original number by unsealing.