Запутывающие строки с ASCII и базой 128 - PullRequest
2 голосов
/ 04 января 2011

Предположим, что строка - это система счисления, где каждая вещь, это может быть char, DEL или любая ASCII-вещь, имеет соответствующий номер в соответствии с ASCII таблицей . Как вы можете преобразовать произвольную строку свойства в число в Python?

Пример

#car = 35*128**3+99*128**2+97*128**1+114*128**0=75034866

Ответы [ 3 ]

7 голосов
/ 04 января 2011

Попробуйте это:

total = 0
for c in "#car":
    total <<= 7
    total += ord(c)
print total

Результат:

75034866

Чтобы вернуть исходную строку:

result = []
while total:
    result.append(chr(total % 128))
    total >>= 7
print ''.join(reversed(result))

Результат:

#car
0 голосов
/ 04 января 2011

Вы ищете карту для запутывания данных.

Реальное шифрование требует использования функции «люка» - функции, которую в вычислительном отношении легко вычислить одним способом, но обратное которой сложно вычислить без конкретной информации.

Большая часть шифрования основана на простой факторизации. Алиса умножает два больших простых числа вместе и дает результаты Бобу. Боб использует это большое простое число для шифрования своих данных с помощью функции шифрования. Для нахождения обратной функции шифрования Боба необходимо знать два исходных простых числа (шифрование не имеет). Поиск этих чисел является очень дорогой вычислительной задачей, поэтому зашифрованные данные «безопасны».

Выполнить это правильно ОЧЕНЬ сложно. Если вы хотите сохранить данные в безопасности, найдите библиотеку, которая сделает это за вас.

РЕДАКТИРОВАТЬ: я должен указать, что я описал шифрование с открытым ключом. Шифрование закрытым ключом работает немного по-другому. Важно то, что существует математическая основа для того, чтобы думать, что зашифрованные данные будет трудно расшифровать без ключа или какого-либо другого рода.

0 голосов
/ 04 января 2011

Для произвольно длинных чисел используйте десятичное число в Python 2.x и просто int в Python 3.x.

Нет понятия о «шифровании».

...