Já faz um tempinho que coloquei o 'Desafio criptografia Blowfish' no meu blog. Só que ninguem conseguiu, ou tentou, resolver o problema.
Vamos ver que é bem simples esse desafio.
Primeiro coisa a fazer é ler o desafio e perceber que temos 2 coisas importantes alí:
- Mensagem criptografada
- Senha da mensagem.
Feito isso já podemos matar o problema. Como?
Primeiro escolha a linguagem de programação que você quer resolver. No caso vamos utilizar Python.
Você pode baixar o blowfish.py aqui.
Se você abrir o código, pode perceber que no final do arquivo têm uns exemplos de uso. Ou simplesmente faça:
$ tail blowfish.py -n 20
A saída será essa:
if __name__ == '__main__': key = 'This is a test key' cipher = Blowfish (key) print "Testing encryption:" xl = 123456 xr = 654321 print "\tPlain text: (%s, %s)" %(xl, xr) cl, cr = cipher.cipher (xl, xr, cipher.ENCRYPT) print "\tCrypted is: (%s, %s)" %(cl, cr) dl, dr = cipher.cipher (cl, cr, cipher.DECRYPT) print "\tUnencrypted is: (%s, %s)" %(dl, dr) print "Testing buffer encrypt:" text = 'testtest' print "\tText: %s" %text crypted = cipher.encrypt (text) print "\tEncrypted: %s" %crypted decrypted = cipher.decrypt (crypted) print "\tDecrypted: %s" %decrypted
Agora já sabemos como faz para chamar o método de criptografar e descriptografar.
Mas peraí, no exemplo acima o mensagem era uns números e não vários caracteres como na do nosso desafio.
Aí vem a primeira pegadinha..
nossa string foi convertida para codificação base 64.
Então teremos de converter toda a string para uma string conhecida pelo blowfish(ou não, temos que ver).
import base64 base64.b64decode('string_do_desafio')
Beleza, agora sabemos que está tudo ok. Temos que conhecer o Blowfish.
Para isso vamos dar uma pesquisada na internet.
...10 minutos depois...
Bom, pelo que eu vi aqui na wikipedia e vejo isso: A entrada para essa parte do algoritmo são 64 bits...
Com complexas contas chegamos que 64 bits = 8 Bytes = 8 caracteres. Para quem não entendeu ainda, fizemos 64 bits / 8 bits = 8 Bytes
Então quer dizer que o blowfish só recebe em blocos de 8 caracteres as entradas.. hmmmm interessante..
Sabendo isso, vamos ter que separar nossa string com muitos caracteres em várias de 8 caracteres apenas.
Faremos isso com um for normal e vamos cortar a string em vários blocos de 8 caracteres. Mas e se o último bloco conter apenas 6 caracteres? Para termos certeza de que a string contem 8 caracteres podemos forcar com o método string.ljust(variavel, 8 )
Não se esqueça que a senha também não deve ter menos de 8 caracteres, então está a outra dica: Usar o ljust() na senha também.
Depois disso é só você criar seu código. Eu criei uma classe bem simples que criptograda e descriptografa.
Na verdade é bem simples sim. Vou postar meu código aqui e quem quiser baixar ele fique a vontade..
Tente desvendar o mistério e resolva o desafio!!!
Agora só falta postarem o resultado, ficou fácil né? hehe
cript.py
# # Feito em 22/08/2007 # import sys import string import base64 import blowfish __author__ = "Felipe Ferreri Tonello <felipe.tonello@gmail.com>" class BFCript: """ Classe que usa criptografia Blowfish juntamente com encodificacao Base64 uso: cript.py cript|descript 'senha' 'texto' PS: Quando for descriptografar, o texto deve estar codificado em Base64 """ CRIPTOGRAFAR = 0 DESCRIPTOGRAFAR = 1 def cript(self, sKey, sTxt, iAction): bf = blowfish.Blowfish((len(sKey) < 8 and [string.ljust(sKey, 8)] or [sKey])[0]) if iAction == self.DESCRIPTOGRAFAR: sTxt = base64.b64decode(sTxt) sCript = "" for i in [x*8 for x in range(0, len(sTxt)/8+1)] : sSBox = sTxt[i:i+8] if len(sSBox) > 0 : if iAction == self.CRIPTOGRAFAR: sCript += bf.encrypt(string.ljust(sSBox, 8)) elif iAction == self.DESCRIPTOGRAFAR: sCript += bf.decrypt(sSBox) if iAction == self.CRIPTOGRAFAR: return base64.b64encode(sCript) elif iAction == self.DESCRIPTOGRAFAR: return sCript ################################################## if __name__ == "__main__" : bfc = BFCript() if len(sys.argv) != 4 or (sys.argv[1] != "cript" and sys.argv[1] != "descript"): print BFCript.__doc__ sys.exit(0) elif sys.argv[1] == "cript" : print bfc.cript(sys.argv[2], sys.argv[3], bfc.CRIPTOGRAFAR) elif sys.argv[1] == "descript" : print bfc.cript(sys.argv[2], sys.argv[3], bfc.DESCRIPTOGRAFAR)


Parabéns, Felipe. Ótimo desafio, pena que só pude ver hoje
...
"Parabens, voce conseguiu descriptografar a mensagem. Apesar da senha conter menos de 8 bytes voce resolveu o problema. Na proxima vez do desafio, nao vai ser entregue a senha. hehe http://felipetonello.com/"
[]s
Parabéns Darlan Campos!!!!!!
Obrigado pela resposta..
Abraços
Boa noite tenho uma prova criptografado mas não estou conseguindo alquem pode me ajudar?
tenho arquivos criptografados com kruptos 2.0 e digitei a senha errada sei la sem atençao agora preciso dos arquivos se puder me ajudar desde ja agradeço
No código abaixo, há dois num. de cel, e um end. de email. tentem decifra-lo, caso consigam, envie resposta para os num de cel ou por amil que esta no codigo.
59 17 13 73 91 11 37 73 37 59 31 17 73 51 59 37 61 59 13 59 03 13 29 67 19 47 27 13 29 51 19 73 53 73 61 73 52 67 73 17 29 07 29 67 92 61 59 67 47 53 19 59 59 17 13 59 67 94 61 47 51 29 50 53 73 07 29 19 59 31 13 19 73 19 59 37 67 29 31 13 73 13 29 27 59 39 29 13 59 39 59 53 29 31 59 62 15 15 22 08 63 22 18 15 04 21 12 12 22 29 11 62 15 15 22 08 63 22 04 21 15 12 22 21 22 29 11 59 31 07 47 59 11 37 59 37 73 47 39 27 73 19 73 31 73 61 47 19 27 74 49 29 13 37 73 47 39 52 67 29 37 29 11 31 73 61 47 19 27 74 71 29 39 52 67 29 37 52 71 19 52 17 59 07 29 67 92 13 59 07 59 73 67 73 27 73 67 47 61 73 61 59 61 59 61 59 67 47 53 19 73 19 59 17 13 59 67 94 61 47 51 29 50 31 87 29 61 59 47 03 59 61 59 59 31 13 19 73 19 59 37 67 29 31 13 73 13 29 52
1S AS NM K9 X8 BV KH K9 KH 1S JG AS K9 Y3 1S KH D3 1S NM 1S YM NM GH 4T QW HZ RF NM GH Y3 QW K9 2A K9 D3 K9 52 4T K9 AS GH XC GH 4T X9 D3 1S 4T HZ 2A QW 1S 1S AS NM 1S 4T 94 D3 HZ Y3 GH 50 2A K9 XC GH QW 1S JG NM QW K9 QW 1S KH 4T GH JG NM K9 NM GH RF 1S JL GH NM 1S JL 1S 2A GH JG 1S 62 FT FT G1 7B &5 63 7B A7 FT X7 G1 2O G* G* 7B GH BV 62 FT FT G1 7B &5 63 7B X7 2O FT G1 G* 7B 2O 7B GH BV 1S JG XC HZ 1S BV KH 1S KH K9 HZ JL RF K9 QW K9 JG K9 D3 HZ QW G1 RF 74 TR GH NM KH K9 HZ JL 52 4T GH KH GH BV JG K9 D3 HZ QW G1 RF 74 6J GH JL 52 4T GH KH 52 6J QW 52 AS 1S XC GH 4T X9 NM 1S XC 1S K9 4T K9 RF K9 4T HZ D3 K9 D3 1S D3 1S D3 1S 4T HZ 2A QW K9 QW 1S AS NM 1S 4T 94 D3 HZ Y3 GH 50 JG 8Z GH D3 1S HZ YM 1S D3 1S 1S JG NM QW K9 QW 1S KH 4T GH JG NM K9 NM GH 52
Good lock my friends!