1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
# -*- coding: utf-8 -*- ''' Description: Blowfish with custom base64 obfuscation. Version: 0.1 Author: Domen "iElectric" Kožar <domen@dev.si> ''' from Crypto.Cipher import Blowfish B64 = "./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" def _i(s, n): try: return s[n] except: return '\x00' def bytetoB64(s): r = '' k = -1 while (k < len(s) - 1): k += 1 left = (ord(_i(s,k)) << 24) k += 1 left += (ord(_i(s,k)) << 16) k += 1 left += (ord(_i(s,k)) << 8) k += 1 left += ord(_i(s,k)) k += 1 right = (ord(_i(s,k)) << 24) k += 1 right += (ord(_i(s,k)) << 16) k += 1 right += (ord(_i(s,k)) << 8) k += 1 right += ord(_i(s,k)) for i in range(0,6): r += B64[right & 0x3F] right = right >> 6 for i in range(0,6): r += B64[left & 0x3F] left = left >> 6 return r def B64tobyte(s): r = '' k = -1 while (k < len(s) -1): left = 0 right = 0 for i in range(0,6): k += 1 try: right |= B64.index(s[k]) << (i*6) except: pass for i in range(0,6): k += 1 try: left |= B64.index(s[k]) << (i*6) except: pass for i in range(0,4): r += chr((left & (0xFF << ((3 - i) * 8))) >> ((3 - i) * 8)) for i in range(0,4): r += chr((right & (0xFF << ((3 - i) * 8))) >> ((3 - i) * 8)) return r def encrypt(data, key): obj = Blowfish.new(key) for i in range(0, (8 - len(data) % 8)): data += chr(0) return bytetoB64(obj.encrypt(data)) def decrypt(data, key): obj = Blowfish.new(key) return obj.decrypt(B64tobyte(data)).replace(chr(0), "") if __name__ == '__main__': print "Text: foobar_foobar" print "Encrypted: " + encrypt('foobar_foobar', '1337') print "Decrypted: " + decrypt(encrypt('foobar_foobar', '1337'), '1337')
Refactorings
No refactoring yet !
http://fish.sekure.us/ - blowfish with custom base64 obfuscation ported to python. Please express ideas.