64798a399a79ed8d34fa83ba0e61c1ac

http://fish.sekure.us/ - blowfish with custom base64 obfuscation ported to python. Please express ideas.

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 !

Your refactoring





Format Copy from initial code

or Cancel