2013-06-07 27 views
8

Tworzę różne procesy, które wykonują różne zadania. Jeden z nich i tylko jeden z nich ma moduł bezpieczeństwa, który tworzy obiekty PyCrypto. Więc mój program uruchamia, tworzy różne procesy, proces, który obsługuje wiadomości wykorzystuje moduł zabezpieczeń do odszyfrowania i otrzymuję następujące błędy:PyCrypto: AssertionError ("Sprawdzanie PID nie powiodło się .RNG musi zostać ponownie zainicjowany po fork(). Wskazówka: Spróbuj 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() 

Deszyfrowanie działa dobrze na interaktywny, gdy nie jest wywoływana z procesu.

Mój moduł zabezpieczający wygląda następująco:

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

Odpowiedz

6

Trzeba zadzwonić Crypto.Random.atfork() po os.fork()

ja po prostu umieścić __init__() w module zabezpieczeń przed innymi te

Powiązane problemy