Python中的ISAAC密码算法

2 投票
1 回答
708 浏览
提问于 2025-04-16 18:19

有没有人能分享一下用Python实现ISAAC加密算法的代码?

我试着找过,但好像没有人做过这个。

谢谢!

1 个回答

4

我在ISAAC主页上看了一些代码示例,感觉这些代码实现起来很简单。如果你需要用纯Python来实现,网上有很多其他语言的例子可以帮助你进行转换。

另一种在Python中使用isaac()的方法是把C代码编译成一个共享库,然后通过ctypes模块(在2.5及以上版本中是标准模块)来访问它。不过,如果你使用的是早期版本,也可以在PyPI上找到。这样做的性能应该比直接用纯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

撰写回答