associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

PyCryptoChavePublica

Receita: Exemplo de uso de PyCrypto com chave pública

Depois de quebrar um pouco a cabeça com a biblioteca devido à falta de documentação, eu e FabioRizzo conseguimos fazer isso funcionar. Vai aqui um exemplo do código caso alguém precise:

Código

   1 from Crypto.PublicKey import RSA
   2 from Crypto.Util.randpool import RandomPool
   3 
   4 texto = "texto a encriptar"
   5 
   6 # Você deve usar a melhor fonte de dados aleatórios que tiver à
   7 # disposição. Pra manter o exemplo mais portável, usaremos o
   8 # RandomPool do próprio PyCrypto:
   9 
  10 pool = RandomPool(384)
  11 pool.stir()
  12 
  13 # randfunc(n) deve retornar uma string de dados aleatórios de
  14 # comprimento n, no caso de RandomPool, o método get_bytes
  15 randfunc = pool.get_bytes
  16 
  17 # Se tiver uma fonte segura (como /dev/urandom em sistemas unix), ela
  18 # deve ser usada ao invés de RandomPool
  19 
  20 # pool = open("/dev/urandom")
  21 # randfunc = pool.read
  22 
  23 # Tamanho da chave, em bits
  24 N = 256
  25 
  26 # O algoritmo RSA usado aqui não utiliza K, que pode ser uma string
  27 # nula.
  28 K = ""
  29 
  30 # Geramos a chave (contendo a chave pública e privada):
  31 key = RSA.generate(N, randfunc)
  32 
  33 # Criptografamos o texto com a chave:
  34 enc = key.encrypt(texto, K)
  35 
  36 # Podemos decriptografar usando a chave:
  37 dec = key.decrypt(enc)
  38 
  39 # Separando apenas a chave pública:
  40 pub_key = key.publickey()
  41 
  42 # Criptografando com a chave pública:
  43 enc = pub_key.encrypt(texto, K)
  44 
  45 # Decriptografando com a chave privada:
  46 dec = key.decrypt(enc)
  47 
  48 # As informações da chave são compostas de seis atributos: 'n', 'e',
  49 # 'd', 'p', 'q' e 'u'. Se quiser armazenar ou enviar uma chave você
  50 # pode usar pickle ou simplesmente usar esses atributos com o método
  51 # construct. Por exemplo:
  52 
  53 # Os atributos 'n' e 'e' correspondem à chave pública:
  54 n, e = key.n, key.e
  55 
  56 # E recriamos a chave pública com esses dados:
  57 pub_key = RSA.construct((n, e))

Volta para CookBook.


PedroWerneck