PyCrypto : AssertionError("PID 检查失败。fork() 后必须重新初始化 RNG。提示:尝试 Random.atfork()")

2024-02-08

我正在创建执行不同任务的各种流程。其中之一(而且只有一个)具有创建 PyCrypto 对象的安全模块。 所以我的程序启动,创建各种进程,处理消息的进程使用安全模块进行解密,我收到以下错误:

   firstSymKeybin = self.cipher.decrypt(encFirstSymKeybin, '')
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Cipher/PKCS1_v1_5.py", line 206, in decrypt
    m = self._key.decrypt(ct)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 174, in decrypt
    return pubkey.pubkey.decrypt(self, ciphertext)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/pubkey.py", line 93, in decrypt
    plaintext=self._decrypt(ciphertext)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 235, in _decrypt
    r = getRandomRange(1, self.key.n-1, randfunc=self._randfunc)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Util/number.py", line 123, in getRandomRange
    value = getRandomInteger(bits, randfunc)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Util/number.py", line 104, in getRandomInteger
    S = randfunc(N>>3)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 187, in read
    return self._singleton.read(bytes)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 163, in read
    return _UserFriendlyRNG.read(self, bytes)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 122, in read
    self._check_pid()
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 138, in _check_pid
    raise AssertionError("PID check failed. RNG must be re-initialized after fork(). Hint: Try Random.atfork()")
AssertionError: PID check failed. RNG must be re-initialized after fork(). Hint: Try Random.atfork()

当不是从进程调用时,解密在交互上效果很好。

我的安全模块如下所示:

'''
Created on 25 Apr 2013

@author: max
'''

import base64, ast, binascii
from Crypto.Cipher import AES
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
import br_consts

class SecurityMod(object):
    '''
    classdocs
    '''

    def __init__(self):
        '''
        Constructor
        '''
        super(SecurityMod,self).__init__()
        self.privkey = RSA.importKey(open('./privkeyBR.pem', 'r').read())
        self.cipher = PKCS1_v1_5.new(self.privkey)
        self.ridToKeySalt = {}

    #depending on the type of message, encryption format is different 
    def encrypt(self, msg, rqId, rid):
        ##code
        return encMsg

    #return string of object so it can be parse by JSON
    def decrypt(self, encMsg, rqId, rid):

       #code
        return msgObjStr



    def pad_data(self,data):
        if len(data) == 0:
            return data
        if len(data) % 16 == 0:
            padding_required = 15
        else:
            padding_required = 15 - (len(data) % 16)
        data = '%s\x80' % data
        data = '%s%s' % (data, '\x00' * padding_required)
        return data


    def unpad_data(self,data):
        if not data:
            return data
        data = data.rstrip('\x00')
        if data[-1] == '\x80': 
            return data[:-1]
        else:
            return data

你需要打电话Crypto.Random.atfork() after os.fork()

我刚刚把__init__()在安全模块中位于其他模块之前

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyCrypto : AssertionError("PID 检查失败。fork() 后必须重新初始化 RNG。提示:尝试 Random.atfork()") 的相关文章

随机推荐

  • Typescript 未在符号链接文件夹中编译枚举

    EDIT 不幸的是 这似乎是一个已知问题 如果不搞乱 create react app 就无法解决 尽管我可能是错的 https github com facebook create react app issues 3547 issuec
  • 如何获取 Int 数组中最常见的值? (C#)

    如何使用 C 获取 Int 数组中最常见的值 例如 数组具有以下值 1 1 1 2 答案应该是1 var query from item in array group item by item into g orderby g Count
  • 如何获取tableview中节头的绝对位置?

    如何获取tableview中节头的绝对位置 我已经使用过tableView viewForHeaderInSection 获取标题的视图 但现在我需要获取该视图在屏幕中的绝对位置 返回值的框架不是屏幕中的绝对位置 我也尝试调用supervi
  • 当函数结果未分配给变量时显示警告

    我有一个函数 它返回传递给该函数的对象的修改副本 我经常做这样的事情 obj obj Foo param 别问为什么 我只是不得不这么做 但有时 我 和其他人 忘记分配返回值 这样做 obj Foo param 这会反复导致耗时的调试 有没
  • localStorage 内容带有时间戳以自行删除

    我想要一个本地存储内容的计时器 例如我有一个动态更新的 DIV div p test p div 并设法使用以下代码将其作为 html 块添加到 localStorage function localStorage homeNews JSO
  • PHP:替换 DateTime 对象

    我的站点托管的服务器位于 PHP5 12 14 上 当我从 PHP5 3 运行 DateTime 对象时出现错误 DateTime add Adds an amount of days months years hours minutes
  • 是否可以通过少于 9 次比较来检查 2 组 3 个整数是否相等?

    int eq3 int a int b int c int d int e int f return a d a e a f b d b e b f c d c e c f 该函数接收 6 个整数 如果前 3 个整数中的任意一个等于后 3
  • 斯威夫特图表库。如何在正确的位置显示X轴日期

    编辑 这是一个调试video https youtu be 8EMA4bnBIPs以及 我用这个library https github com danielgindi Charts在我的 Swift iOS 应用程序中显示图表 这是我的图
  • DateAdd 列导致溢出

    执行以下查询后 我收到错误 向 日期时间 列添加值导致溢出 我不知道为什么会发生这种情况 因为它已经顺利运行了几周 我只是想在此处添加日期并将它们与开始日期和结束日期进行比较between clause DATEADD day 1 DATE
  • ORG 汇编指令有什么作用?

    谁能给我一个关于 ORG 指令的全面描述 何时以及为何在汇编编写的应用程序中使用它 在 x86 或 AMD64 上使用 Nasm ORG用于设置汇编器位置计数器 这可能会也可能不会在链接时转换为加载地址 它可用于定义绝对地址 例如当定义诸如
  • 如何计算 C# 数组列表的滚动平均值?

    我正在尝试计算数组列表中每四个值的滚动平均值 并将这些值添加到单独的数组列表中 我的原始数组列表称为 numlist 它包含从 1 到 9 的值 List
  • Spring Boot - org.springframework.cglib.core.ReflectUtils$1 进行非法反射访问

    我在使用 Spring Boot 的 Spring 应用程序中遇到问题 WARNING An illegal reflective access operation has occurred WARNING Illegal reflecti
  • 我可以枚举可用的 WLAN 吗?

    我想获取我周围可用的 WLAN 的信息 例如 SSID 这可能吗 Edit 可能是 通过市场认证 的意思 不 这在当前的 API 集中不可用 而且我认为 Mango 集中也没有提到它
  • 计算一系列的总和?

    这是我的任务 在我的一生中 我似乎想不出办法来完成它 这是我到目前为止的代码 sum 0 k 1 while k lt 0 0001 if k 2 1 sum sum 1 0 k else sum sum 1 0 k k k 1 print
  • Python - 如何在没有引号和空格的情况下将字符串写入文件?

    是否可以写入不带引号和空格的文件字符串 列表中任何类型的空格 例如我有这样的列表 blabla 10 something 我怎样才能写入文件 使文件中的行变成这样 blabla 10 something 现在 每次我将其写入文件时 我都会得
  • 如何根据模式先决条件设置 Makefile 目标?

    我在 makefile 中有一系列模式依赖项 最后它们应该放在一个文件中 例如 x gt y gt onefile z 所以我制作了这样的文件 touch a x b x 和规则 y x some other script touch on
  • 对于大文件,fread 会失败吗?

    我必须分析一个 16 GB 的文件 我正在使用顺序阅读文件fread and fseek 可行吗 将要fread 处理这么大的文件 你没有提到语言 所以我假设是 C 我没有看到任何问题fread but fseek and ftell可能有
  • 如何从 VBA 创建单独的 CSV 文件?

    我需要将一些结果输出为 csv 文件 稍后由另一个进程解析 为了产生这些结果 我有一本巨大的工作簿 其中包含我需要的所有宏和函数 是否可以从 VBA 创建 单独的 csv 文件 是否可以使用 VBA 功能来写入它 而不仅仅是以 原始文本 方
  • Android 和客户端证书

    我已经寻找这个问题几个星期了 似乎无法在任何地方找到答案 我正在尝试为 Android 执行以下操作 此代码来自我编写的 C 应用程序 但我正在将其移植到 Android Web 端点需要将证书附加到相互身份验证的请求中才能进行 Web 服
  • PyCrypto : AssertionError("PID 检查失败。fork() 后必须重新初始化 RNG。提示:尝试 Random.atfork()")

    我正在创建执行不同任务的各种流程 其中之一 而且只有一个 具有创建 PyCrypto 对象的安全模块 所以我的程序启动 创建各种进程 处理消息的进程使用安全模块进行解密 我收到以下错误 firstSymKeybin self cipher