Я пишу способ проверить, соответствует ли клиентский порядковый номер моему твердому кодированному числу. Существует ли способ сделать это максимально трудно для чтения в случае, если нежелательный достает код?
Я работаю в Java.
Например (псевдо код)
если (x! = y) выпрыгните из кода и ошибки возврата
С наилучшими пожеланиями, извинения, если это - что-то вроде нечетного
Защита через неизвестность - всегда плохая идея. Избегать этого не нужно, но не стоит полагаться только на это.
Либо зашифруйте серийные номера с помощью ключа, который вы вводите при запуске службы, либо просто укажите серийные номера как шестнадцатеричные или base64, а не ASCII.
Обычный способ сделать это - использовать хэш.
По определению, по хешу практически невозможно вывести исходный код.
Усложнение кода, чтобы избежать взлома, никогда не помогает!
Вы можете попробовать SHA1 или другое одностороннее шифрование (MD5 не так безопасен, но довольно хорош). Не делайте этого:
if (userPassword equals myHardCodedpassword)
Сделайте это:
if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword)
Таким образом, программа чтения кода может видеть только зашифрованное (и очень, очень и очень трудно расшифровать) значение.
В Википедии есть статья об обфускации кода . Может там уловки вам помогут =)
Запутать управляющую структуру выпущенного кода?
например, вводить числа в случайном месте кода под другой переменной и в какой-то случайный момент сделать их равными x и y?
Вместо того чтобы пытаться усложнить код, можно реализовать другие методы, которые не будут раскрывать ваш жестко закодированный серийный номер.
Попробуйте хранить закодированный номер в каком-нибудь постоянном месте в виде зашифрованного массива байтов. Таким образом, его нельзя будет прочитать. Для сравнения зашифруйте серийный код клиента с помощью того же алгоритма и сравните.