【问题标题】:function error for python-rsa modulepython-rsa模块的函数错误
【发布时间】:2016-03-31 11:39:21
【问题描述】:

我安装了Python-RSA 用于在我的python 项目中使用rsa 算法,但是当我想使用它时出现这个错误:

import rsa
(public_key, private_key) = rsa.newkeys(1024, accurate=True, poolsize=8)

以上代码来自official Doc

我检查了 newkeys() 函数的模块文件并且这个函数存在

def newkeys(nbits, accurate=True, poolsize=1):
    if nbits < 16:
        raise ValueError('Key too small')
    if poolsize < 1:
        raise ValueError('Pool size (%i) should be >= 1' % poolsize)
    if poolsize > 1:
        from rsa import parallel
        import functools
        getprime_func = functools.partial(parallel.getprime, poolsize=poolsize)
    else: getprime_func = rsa.prime.getprime
    (p, q, e, d) = gen_keys(nbits, getprime_func)
    n = p * q
    return (PublicKey(n, e), PrivateKey(n, e, d, p, q))
__all__ = ['PublicKey', 'PrivateKey', 'newkeys']
if __name__ == '__main__':
    import doctest
    try:
        for count in range(100):
            (failures, tests) = doctest.testmod()
            if failures:
                break
            if (count and count % 10 == 0) or count == 1:
                print('%i times' % count)
    except KeyboardInterrupt:
        print('Aborted')
    else:
        print('Doctests done')

这里有什么问题?

【问题讨论】:

  • python -c "import rsa; print (dir(rsa)); print (rsa.__file__)" 的输出是什么?
  • 同样的错误@GregoryNisbet .....我现在正在编辑
  • 你是通过pip还是通过复制文件来安装python-rsa模块的?
  • 您可以尝试将H:\Work\Python-Django\Projects\RSA\rsa.py 中的文件重命名为其他名称,然后再次运行它并查看错误是否更改?另外,您的rsa.py 文件是做什么用的?从好的方面来说,您的 python-rsa 模块似乎已正确安装并包含 newkeys 方法。
  • 我想先测试这个模块,然后在我的项目中使用它.....通过重命名文件我没有任何错误,但是关于模块功能的很多很多行的描述,我可以'不明白他们中的任何一个..... oooooh :( @GregoryNisbet

标签: python algorithm encryption cryptography rsa


【解决方案1】:

所以,事实证明,您遇到了 Python 的一个相当奇怪的属性,即您可以导入当前文件的模块。您的 rsa.py 文件覆盖了 rsa 目录(其中包含一个 __init__.py 文件,因此可以作为模块加载。)

尝试使用以下内容制作文件foo.py

import foo

def bar():
    return 5

print dir(foo)

这将打印类似

的内容
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo']
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo']

当你运行python foo.py

它会打印两次目录结构(加载模块时一次)和评估文件时一次。

不会导致无限循环,因为 Python 会缓存它已经加载的模块。

【讨论】:

    【解决方案2】:

    感谢格雷戈里:

    1- 首先,*.py 文件名和导入的模块名不能相同....如果我们为它们使用相同的名称,就会出现类似我的问题。 IDLE无法识别运行文件的写方式

    2- 此模块存在严重问题。当我想使用 newkeys() 函数的 poolsize=x 参数时,我的程序中有很多错误和一个大循环。这是因为这个模块的多处理在 Windows 10 中不起作用。这个问题可能是由 Windowsmodule 引起的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-20
      • 2021-07-28
      • 2011-06-23
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多