Есть ли у кого-нибудь какие-либо рабочие реализации шифрования ISAAC в python?
Я пытался найти это, но, похоже, никто никогда не делал этого.
Спасибо.
Я прочитал несколько примеров кода на домашней странице ISAAC, и код выглядит просто для реализации. Если вам это нужно в чистом Python, есть несколько примеров на других языках, чтобы направлять ваши усилия по переносу.
Другим способом использования isaac()
из Python является создание кода C как общей библиотеки и доступ к нему через ctypes module, который является стандартным в версии 2.5+, но может быть найден в PyPI для более ранних версий. Это также должно работать намного лучше, чем прямой порт в чистом Python.
Здесь приведен пример построения версии C isaac()
в качестве общей библиотеки и использования ее через ctypes. Сначала вам нужно скачать rand.c
, rand.h
и standard.h
с веб-сайта автора, а затем построить:
% gcc -shared -fPIC -o libisaac.so rand.c
Вот код Python. Обратите внимание, что размеры полей в RandCtx
зависят от того, построен ли код для 32- или 64-разрядной платформы. Я тестировал 64-битный Ubuntu. Для 32-битного кода вам нужно будет изменить все поля, чтобы использовать c_uint32
:
from ctypes import *
class RandCtx(Structure):
RANDSIZL = 8
RANDSIZ = 1 << RANDSIZL
_fields_ = [
('randcnt', c_uint64),
('randrsl', c_uint64 * RANDSIZ),
('randmem', c_uint64 * RANDSIZ),
('randa', c_uint64),
('randb', c_uint64),
('randc', c_uint64)
]
ctx = RandCtx()
lib = cdll.LoadLibrary('./libisaac.so')
lib.randinit(byref(ctx), 0)
lib.isaac(byref(ctx))
for i in xrange(4):
print ctx.randrsl[i]
Вывод:
% python isaac.py
14012348966175605106
8193820543905647488
4194352129441799609
12121047914186473054