Làm cách nào để giải nén mã này?

lập trình


Bản thân mã này không nén ..

Nhưng khi được sử dụng cùng với Zlib, nó sẽ nén ..

Xem Compress_loop()

nó bắt đầu ở phần cuối của luồng đầu vào hex và bình phương từng chữ số.
nếu đặt chữ số thập lục phân cuối cùng vào đầu ra và mang phần còn lại sang chữ số đầu vào tiếp theo.

Tôi đang tìm người có thể giải nén đầu ra của nó …

[edit]

Từ OP, được đăng dưới dạng giải pháp:

Trích dẫn:

Nguồn được viết bằng FreeBasic

[/edit]

Những gì tôi đã thử:

Declare Function      compress_loop( chrs as string ) as string
Declare Function decompress_loop( chrs as string ) as string

screen 19
'=====================================================================
'=====================================================================
'start program
'=====================================================================
'=====================================================================
dim as double time1 , time2 , time3 , time4
do
   
    randomize
   
    dim as string s = ""
    For n As Long = 1 To 8
        s+=chr(Int(Rnd*256))
    Next
   
    time1=timer
    'begin compress
        dim as string comp = s
            'do
            '    dim as longint chk = len(comp) - 1
            '    comp = compress_loop(comp)
            '    if len(comp) >= chk then exit do
            'loop
            for a as longint = 1 to 1 step 1
                comp = compress_loop(comp)
            next
    'end compress
    time2 = timer
   
    time3=timer
    'begin decompress
        dim as string final_out = comp
        for a as longint = 1 to 1 step 1
            final_out = decompress_loop(final_out)
        next
    'end decompress
    time4 = timer
   
   'sleep
   
    'cls
    'draw string( 0,10) , left(s,100)
    'draw string( 0,30) , left(final_out,100)
    print string(99,"=")
    print "inp = " ; (s)
    print string(99,"=")
    print "out = " ; (final_out)
    print
    print "compress time   = "; time2-time1
    print "decompress time = "; time4-time3
    print
   
    if s = final_out then print "Decompressed OK" else print "Decompression failed."
    print string(99,"=")
   
    sleep
   
loop until inkey = chr(27)

sleep
end
'===============================================================================
'===============================================================================
'compress
'===============================================================================
'===============================================================================
Function compress_loop( chrs as string ) as string
   
    print "c inp = " ; len(chrs)
   
    dim as string bits = ""
    dim as string zeros = string( 2 , "0" )
    dim as string n1
    dim as ubyte ptr usp = cptr( ubyte ptr , strptr( chrs ) )
    for a as longint = 1 to len( chrs ) step 1
        n1 = zeros + hex( *usp ) : usp+= 1
        n1 = right( n1 , 2 )
        bits+= n1
    next
   
    print "c bin = " ; len(bits) , bits
    
    dim as string outs1 = string( len( bits ) , "0" )
    dim as string s1 , s2 , s3
    dim as longint v1 , v2 , carry
    zeros = "000"
    for a as longint = len( bits ) to 1 step - 1
            
            's1 = str( ( val( "&H" + mid( bits , a , 1 ) ) ^ 2 ) + carry ) : carry = 0
            's2 = right( "000" + hex( val( s1 ) ) , 3 )
            
            v1 = bits[ a - 1 ]
            
            if v1 = 48 then v2 = 000 + carry : goto done
            if v1 = 49 then v2 = 001 + carry : goto done
            if v1 = 50 then v2 = 004 + carry : goto done
            if v1 = 51 then v2 = 009 + carry : goto done
            if v1 = 52 then v2 = 016 + carry : goto done
            if v1 = 53 then v2 = 025 + carry : goto done
            if v1 = 54 then v2 = 036 + carry : goto done
            if v1 = 55 then v2 = 049 + carry : goto done
            if v1 = 56 then v2 = 064 + carry : goto done
            if v1 = 57 then v2 = 081 + carry : goto done
            if v1 = 65 then v2 = 100 + carry : goto done
            if v1 = 66 then v2 = 121 + carry : goto done
            if v1 = 67 then v2 = 144 + carry : goto done
            if v1 = 68 then v2 = 169 + carry : goto done
            if v1 = 69 then v2 = 196 + carry : goto done
            if v1 = 70 then v2 = 225 + carry : goto done
            
            done:
            
            carry = 0
            
            s2 = zeros + hex( v2 )
            s2 = right( s2 , 3 )
            
            carry = val( "&H" + left( s2 , 2 ) ) 
            s3 = right( s2 , 1 )

            outs1[ a - 1 ] = s3[ 0 ]
            
            'print v1 ,  s2 , s3 ', outs1
            'sleep
            'if inkey = " " then end
            
    next
    
    if carry > 0 then outs1 = hex( carry ) + outs1
    
    print "c out = " ; len( outs1 ) , outs1
    
    dim as ubyte count = 0
    if len( outs1 ) mod 2 = 1 then outs1+= "0" : count = 1
        
    dim as string final = ""
    for a as longint = 1 to len( outs1 ) step 2
        final+= chr( val( "&H" + mid( outs1 , a , 2 ) ) )
    next
    
    final = chr( count ) + final
    
    print "c fin = " ; len(final)
   
    return final
   
end function
'===============================================================================
'============================================================================
Function decompress_loop( chrs as string ) as string
   
    print "dc inp = " ; len(chrs)
    
    dim as ubyte count = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
    
    dim as string bits = ""
    dim as string zeros = string( 2 , "0" )
    dim as string n1
    dim as ubyte ptr usp = cptr( ubyte ptr , strptr( chrs ) )
    for a as longint = 1 to len( chrs ) step 1
        n1 = zeros + hex( *usp ) : usp+= 1
        n1 = right( n1 , 2 )
        bits+= n1
    next
    
    bits = left( bits , len( bits ) - count )
    
    print "d bin = " ; len(bits) , bits
   
    return chrs 
   
end function

Giải pháp 2

Sau khi sắp xếp “giải pháp thông tin bổ sung” của bạn, tôi đã xem câu hỏi và …

Không. Nó không hoạt động như vậy. Chúng tôi sẽ không đảo ngược một đoạn mã lớn cho bạn – đó là công việc của bạn và bạn được trả tiền cho nó hoặc đó là một phần bài tập về nhà của bạn và điều đó sẽ không công bằng cho bạn, bạn cùng lớp hoặc tương lai của bạn nhà tuyển dụng.

Chúng tôi không làm công việc của bạn cho bạn.
Nếu bạn muốn ai đó viết mã cho mình, bạn phải trả tiền – tôi khuyên bạn nên truy cập Freelancer.com và hỏi ở đó.

Nhưng hãy lưu ý: bạn nhận được những gì bạn phải trả. Trả đậu phộng, nhận được khỉ.

Ý tưởng về “phát triển” đúng như từ gợi ý: “Việc sử dụng có hệ thống kiến ​​thức khoa học và kỹ thuật để đáp ứng các mục tiêu hoặc yêu cầu cụ thể”. BusinessDictionary.com[^]

Điều đó không giống như “hãy tra google nhanh và bỏ cuộc nếu tôi không thể tìm thấy chính xác mã phù hợp”.
Vì vậy, hãy trả tiền cho người khác để làm việc đó hoặc học cách tự viết nó. Chúng tôi không ở đây để làm điều đó cho bạn.

Giải pháp 3

Có lẽ bạn có thể thử ví dụ Zlib tại đây: fbc/zlib.bas tại master · freebasic/fbc · GitHub[^]

Giải pháp 4

Trích dẫn:

Làm cách nào để giải nén mã này?

Khó đoán bạn muốn gì vì mã được cung cấp không được nén và không phải về nén.
Chúng ta phải đoán từ ‘nén’ có nghĩa là gì trong đầu bạn.
Chúng tôi không thể làm gì cho bạn cho đến khi bạn giải thích rõ ràng những gì bạn muốn.

Giải pháp 5

nén def(bản gốc_text):
tổng = 1
trước_char = “”
nén_text=””
cho ký tự trong (origin_text):
nếu ký tự before_char ==:
tổng=tổng+1
nén_text+=ký tự+str(tổng)
in()
khác:
tổng = 1
nén_text+=ký tự+str(tổng)
trước_character=ký tự
trả về(nén_text)

コメント

タイトルとURLをコピーしました