2013-06-07 10 views
8

Tôi đang tạo các quy trình khác nhau thực hiện các tác vụ khác nhau. Một trong số họ và chỉ một trong số họ, có một mô-đun bảo mật tạo ra các đối tượng PyCrypto. Vì vậy, chương trình của tôi bắt đầu, tạo ra các quá trình khác nhau, quá trình xử lý thông điệp sử dụng các module bảo mật để giải mã và tôi nhận được các lỗi sau đây:PyCrypto: AssertionError ("Kiểm tra PID không thành công. RNG phải được khởi tạo lại sau ngã ba(). Gợi ý: Thử Random.atfork()")

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() 

giải mã hoạt động tốt trên tương tác, khi không được gọi từ một quá trình.

module bảo mật của tôi trông như thế này:

''' 
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 

Trả lời

6

Bạn cần phải gọi Crypto.Random.atfork() sau os.fork()

Tôi chỉ đặt __init__() trong module bảo mật trước khi những người khác

Các vấn đề liên quan