ISAAC шифр на питоне - PullRequest
1 голос
/ 25 мая 2011

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

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

Спасибо.

1 Ответ

3 голосов
/ 26 мая 2011

Я прочитал несколько примеров кода на домашней странице ISAAC , и этот код кажется простым для реализации. Если вам это нужно на чистом Python, есть несколько примеров на других языках, которые помогут вам при переносе.

Другой способ использования isaac() из Python - это создание кода C в качестве разделяемой библиотеки и доступ к нему через модуль ctypes , который является стандартным в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...