在python中的ISAAC密码

时间:2011-05-25 15:36:33

标签: python encryption

有没有人在python中有任何ISAAC密码的工作实现?

我试图找到这个,但似乎没有人做过。

感谢。

1 个答案:

答案 0 :(得分:3)

我在ISAAC home page上阅读了一些代码示例,代码看起来很容易实现。如果您需要纯Python,那么在其他语言中有几个示例可以指导您的移植工作。

使用Python的isaac()的另一种方法是将C代码构建为共享库并通过ctypes module, which is standard in 2.5+访问它,但可以是found on PyPI for earlier versions。这也应该比纯Python中的直接端口好得多。

以下是将isaac()的C版本构建为共享库并通过ctypes使用它的示例。首先,您需要从作者的网站下载rand.crand.hstandard.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