有没有人在python中有任何ISAAC密码的工作实现?
我试图找到这个,但似乎没有人做过。
感谢。
答案 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.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