Мой клиент - программист на Python, и я создал для него бэкэнд C++, который включает в себя создание и проверку лицензии. Для дополнительной безопасности интерфейс Python также проведет проверку действительности лицензии.Перевести алгоритм хэширования от C до Python
Однако алгоритм генерации и проверки лицензии основан на методах хэширования, которые полагаются на то, что целое число имеет фиксированный размер байта и смещение битов, значение не будет увеличивать количество байтов целых чисел.
Это упрощенный пример кода:
unsigned int HashString(const char* str) {
unsigned int hash = 3151;
while (*str != 0) {
hash = (hash << 3) + (*str << 2) * 3;
str++;
}
return hash;
}
Как это может быть переведен на Python? Прямой перевод, очевидно, дает другой результат:
def hash_string(str):
hash = 3151
for c in str:
hash = (hash << 3) + (ord(c) << 2) * 3
return hash
Например:
hash_string("foo bar spam") # 228667414299004
HashString("foo bar spam") // 3355459964
Edit: То же самое можно будет также необходимо для PHP, так как интернет-магазин должен быть в состоянии генерировать действительные лицензии тоже.
Почему бы просто не сделать .dll (или .so) кода c, где он мог бы вызвать метод из python, используя вызовы cdll –
@JoranBeasley: Просить код C++ для проверки кода на C++ кажется, что он может победить цель , (Я не уверен, что именно он пытается защитить отсюда, так что это может быть и не так ...) – abarnert
Возможно, была заменена DLL, которая заставила бы взломать приложение. –