我正在编写一个使用Paillier Cryptosystem来加密矩阵的程序.要加密50 x 50矩阵,大约需要12秒!考虑到我打算加密大小为5000 x 5000及以上的矩阵,这是痛苦的.在Xcode上分析程序我发现这个paillier_get_rand_devurandom()是罪魁祸首.
这是调用跟踪快照:

这是此特定Paillier C库函数的源代码
void paillier_get_rand_devurandom( void* buf, int len )
{
paillier_get_rand_file(buf, len, "/dev/urandom");
}
void paillier_get_rand_file( void* buf, int len, char* file )
{
FILE* fp;
void* p;
fp = fopen(file, "r");
p = buf;
while( len )
{
size_t s;
s = fread(p, 1, len, fp);
p += s;
len -= s;
}
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)
如果是的话,
<http://www.en.wikipedia.org/wiki/Paillier_cryptosystem>
Paillier Cryptosytem C library : <http://acsc.cs.utexas.edu/libpaillier/>
Run Code Online (Sandbox Code Playgroud)
我已经读过使用dev/random的随机数生成很慢而使用dev/urandom则更快.在我的情况下,两者都同样缓慢.这个随机数生成能否更快?
编辑:这是一个例子
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include<paillier.h> …Run Code Online (Sandbox Code Playgroud)