ISAAC шифр на питоне

1

Есть ли у кого-нибудь какие-либо рабочие реализации шифрования ISAAC в python?

Я пытался найти это, но, похоже, никто никогда не делал этого.

Спасибо.

  • 1
    Это может помочь вашему вопросу связать или предоставить описание шифра.
Теги:
encryption

1 ответ

3

Я прочитал несколько примеров кода на домашней странице 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню