Я должен расположить некоторый encrpytion для генерации пользователя определенные ссылки. Пользователи будут нажимать на эту ссылку и при некотором другом представлении, ссылка по теме со строкой crypted будет дешифрована, и результат будет возвращен.
Для этого мне нужна некоторая функция шифрования, которая использует число (или строка), который является первичным ключом моего выбранного пункта, который связывается с учетной записью пользователя, также используя некоторое семя и генерируя код шифрования, который будет дешифрован на уровне некоторой другой страницы.
так что-то вроде этого
my_items_pk = 36 #primary key of an item
seed = "rsdjk324j23423j4j2" #some string for crypting
encrypted_string = encrypt(my_items_pk,seed)
#generates some crypted string such as "dsaj2j213jasas452k41k"
and at another page:
decrypt_input = encrypt(decypt,seed)
print decrypt_input
#gives 36
Я хочу, чтобы мое "семя" было некоторой основной переменной (не некоторый класс) с этой целью (т.е. некоторое число или строка).
Как я могу достигнуть этого в соответствии с Python и django?
Добавляю приведенный ниже фрагмент кода в том виде, в котором требуется индикатор активности на панели навигации.
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];
-121--1136926- Я не уверен, что вы пытаетесь сделать. Но вот несколько примеров.
Предположим, что у меня есть следующий диапазон:
Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;
Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;
Для перемещения диапазона вниз на n
- число строк:
int n = 1;
int rows = range.Rows.Count;
int cols = range.Columns.Count;
Excel.Range newRange = range.get_Offset(n, 0).get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row lower
Для перемещения нижнего ряда вверх
Excel.Range newRange = range.get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row higher
Я предполагаю, что вы можете выяснить, как переместить его в сторону.
get _ смещение ()
переместит весь диапазон, после чего потребуется изменить его размер.
EDIT: Теперь я знаю, чего вы хотите.
Выбор последней ячейки:
Excel.Range lastCell = range.Cells[rows, cols] as Excel.Range;
lastCell.Select();
Теперь можно использовать собственную начальную точку, например:
Excel.Range newRange = sheet.get_Range("B1", lastCell);
newRange.Select();
-121--4268313- Нет алгоритмов шифрования, встроенных в Python. Однако, возможно, вам потребуется просмотреть Python Cryptography Toolkit (PyCrypt). Я только обдумал его, но он упоминается в документации Python по криптографическим службам . Вот пример того, как можно зашифровать последовательность с помощью AES с помощью PyCrypt:
from Crypto.Cipher import AES
from urllib import quote
# Note that for AES the key length must be either 16, 24, or 32 bytes
encryption_obj = AES.new('abcdefghijklmnop')
plain = "Testing"
# The plaintext must be a multiple of 16 bytes (for AES), so here we pad it
# with spaces if necessary.
mismatch = len(plain) % 16
if mismatch != 0:
padding = (16 - mismatch) * ' '
plain += padding
ciph = encryption_obj.encrypt(plain)
# Finally, to make the encrypted string safe to use in a URL we quote it
quoted_ciph = quote(ciph)
Затем вы сделаете эту часть вашего URL, возможно, как часть запроса GET.
Чтобы расшифровать, просто отмените процесс; предполагая, что encryption _ obj
создан, как описано выше, и что вы получили соответствующую часть URL-адреса, это будет сделано:
from urllib import unquote
# We've already created encryption_object as shown above
ciph = unquote(quoted_ciph)
plain = encryption_obj.decrypt(ciph)
Вы также можете рассмотреть другой подход: один простой метод будет хэшировать первичный ключ (с помощью соли, если вы хотите) и хранить хэш и pk в вашей базе данных. Предоставьте пользователю хэш как часть его ссылки, а когда они вернутся и представят хэш, найдите соответствующий pk и верните соответствующий объект. (Если вы хотите пройти по этому маршруту, проверьте встроенную библиотеку hashlib .)
В качестве примера, у вас было бы что-то подобное, определенное в models.py:
class Pk_lookup(models.Model):
# since we're using sha256, set the max_length of this field to 32
hashed_pk = models.CharField(primary_key=True, max_length=32)
key = models.IntegerField()
И вы бы создали хэш в представлении, используя что-то вроде следующего:
import hashlib
import Pk_lookup
hash = hashlib.sha256()
hash.update(str(pk)) # pk has been defined previously
pk_digest = hash.digest()
lookup = Pk_lookup(hashed_pk=pk_digest,key=pk)
lookup.save()
Обратите внимание, что вы также должны цитировать эту версию; если вы предпочитаете, вы можете использовать hexdigest ()
вместо digest
(вам не придется цитировать результирующий ряд), но вам придется скорректировать длину поля, чтобы 64.