Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. from Crypto.Cipher import Blowfish
  2. from Crypto import Random
  3. from struct import pack
  4. from sys import argv
  5.  
  6. def encriptar(key, plaintext):
  7.     bs = Blowfish.block_size
  8.     iv = Random.new().read(bs)
  9.     bf = Blowfish.new(key, Blowfish.MODE_CBC, iv)
  10.     plen = bs - (len(plaintext) % bs)
  11.     padding = [plen]*plen
  12.     padding = pack('b'*plen, *padding)
  13.     msg = iv + bf.encrypt(plaintext + padding)
  14.     return msg
  15.  
  16. def recuperar(key, ciphertext):
  17.     bs = Blowfish.block_size
  18.     v = Random.new().read(bs)
  19.     uncipher = Blowfish.new(key,Blowfish.MODE_CBC, v)
  20.     m = uncipher.decrypt(ciphertext)
  21.     return m[8:]
  22.  
  23. if __name__ == '__main__':
  24.     msg = ''
  25.     for i in xrange(1,len(argv)):
  26.         if argv[i].lower() == '-p':
  27.             key = argv[i+1]
  28.         elif argv[i].lower() == '-m':
  29.             msg = argv[i+1]
  30.         elif argv[i].lower() == '--test':
  31.             print msg
  32.             ct = encriptar(key,msg)
  33.             pt = recuperar(key, ct)
  34.             print 'Texto Cifrado:\t %s' % ct
  35.             print 'Texto Original:\t %s' % pt