Страницы

вторник, 23 августа 2011 г.

Симметричное шифрование для php (python)

Переписал функцию на питоне. Планирую использовать ее на google app engine. Пришлось несколько изменить алгоритм. deflate заменил на compress.

сама функция xor:

    def xor_it(str,key):
        code=''
        y=0

        for i in xrange(0, len(str)):
            if y==len(key): y=0
            code+=chr(ord(str[i:i+1])^ord(key[y:y+1]))
            y+=1
        return code


функция шифрования скрипта:

# -*- coding: utf-8 -*-
def add_armor(code,cookie_name,cookie_key):
    def xor_it(str,key):
        code=''
        y=0

        for i in xrange(0, len(str)):
            if y==len(key): y=0
            code+=chr(ord(str[i:i+1])^ord(key[y:y+1]))
            y+=1
        return code

    def pack_it(code):
        #return base64_encode(gzdeflate(code))
        deflate=zlib.compress(code)
        base64=deflate.encode('base64')
        return base64

    def add_protection(code,checksum,salt):
        checksum=str(checksum)
        return '/*'+salt+'*/$i=get_included_files();$s=$i[0];if(filesize($s)=='+checksum+' && sizeof($i)==1){'+code+'}else{unlink($s);die();}'

    def add_body(base64_code,cookie_name):
        return '<?php function x($s,$k){$c=\'\';for($i=0,$y=0;$i<strlen($s);$i++,$y++){if($y==strlen($k))$y=0;$c.=chr(ord(substr($s,$i,1))^ord(substr($k,$y,1)));}return $c;}if(isset($_COOKIE[\''+cookie_name+'\'])){$k=$_COOKIE[\''+cookie_name+'\'];$l=floor(strlen($k)/2);$k1=substr($k,0,$l);$k2=substr($k,$l);$s=gzuncompress(base64_decode(\''+base64_code+'\'));eval(x(x($s,$k1),$k2));}?>'

    code_length=-1
    compiled_code=''
    i=0
    salt=''

    key_len=len(cookie_key)
    key1_len=int(math.floor(key_len / 2))

    cookie_key1=cookie_key[0:key1_len]
    cookie_key2=cookie_key[key1_len:]


    while code_length!=len(compiled_code):
        if i>5:
            salt+=chr(rand(0,255))
            i=0

        code_length=len(compiled_code)
        compiled_code=add_protection(code,code_length,salt)
        compiled_code=xor_it(compiled_code,cookie_key1)
        compiled_code=xor_it(compiled_code,cookie_key2)
        compiled_code=pack_it(compiled_code)
        compiled_code=add_body(compiled_code,cookie_name)
        i+=1

    return compiled_code

1 комментарий: