Python中的ISAAC密码算法
有没有人能分享一下用Python实现ISAAC加密算法的代码?
我试着找过,但好像没有人做过这个。
谢谢!
1 个回答
4
我在ISAAC主页上看了一些代码示例,感觉这些代码实现起来很简单。如果你需要用纯Python来实现,网上有很多其他语言的例子可以帮助你进行转换。
另一种在Python中使用isaac()
的方法是把C代码编译成一个共享库,然后通过ctypes模块(在2.5及以上版本中是标准模块)来访问它。不过,如果你使用的是早期版本,也可以在PyPI上找到。这样做的性能应该比直接用纯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