2013-06-07 23 views
8

Farklı görevleri gerçekleştiren çeşitli işlemler oluşturuyorum. Bunlardan biri ve bunlardan sadece biri, PyCrypto nesnelerini yaratan bir güvenlik modülüne sahiptir. Yani benim program başladığında çeşitli süreçleri yaratır, iletileri işleyen süreç şifresini çözmek için güvenlik modülü kullanır ve aşağıdaki hataları alıyorum:PyCrypto: AssertionError ("PID denetimi başarısız oldu. RNG, fork() öğesinden sonra yeniden başlatılmalıdır. İpucu: Random.atfork()") deneyin

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

deşifre bir süreçten denilen değilken, interaktif üzerinde iyi çalışır.

My güvenlik modülü şöyle görünür:

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

cevap

6

Biliyorsun sadece diğerleri önce güvenlik modülünde __init__() koymak Crypto.Random.atfork()os.fork()

sonra aramaya gerek