2015-05-14 254 views
0

我有加密代碼,並與密鑰十六進制字符串壓縮

<% 
Dim a, string, key 
string = "АБВГДЕЁЖЗИЙКЛМНОП РСТУФХЦЧШЩЪЫЬЭЮЯZàáâ{'-+/}äãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð[email protected]#$%^" 

key = "CaIm^0=SGQWp1aL" 
a = s2h(string,key) 

response.write(a) 
response.write(h2s(a,key)) 

Function s2a(s) 
    ReDim a(Len(s) - 1) 
    Dim i 
    For i = 0 To UBound(a) 
     a(i) = Mid(s, i + 1, 1) 
    Next 
    s2a = a 
End Function 

Function s2h(s,k) 
    Dim a : a = s2a(s) 
    Dim i,y 
    y=1 

    For i = 0 To UBound(a) 
     a(i) = Right("0000" & Hex(AscW(a(i))+AscW(Mid(k,y,1))), 4) 
     y=y+1 
     if y > len(k) then y=1 

    Next 
    s2h = Join(a) 
End Function 

Function h2s(h,kk) 
    Dim a : a = Split(h) 
    Dim i,yy 
    yy=1 
    For i = 0 To UBound(a) 
     a(i) = ChrW(("&H" & a(i))-AscW(Mid(kk,yy,1))) 
     yy=yy+1 
     if yy > len(kk) then yy=1 
    Next 
    h2s = Join(a, "") 
End Function 


%> 

解密字符串,但我得到一個很大的十六進制字符串

0453 0472 045B 0480 0472 0445 043E 0469 045E 0469 0470 048A 044C 047D 0469 0461 0480 0069 048D 047F 0452 0460 0477 046C 0477 047E 0498 045A 048B 0477 046F 048E 0477 049C 00B8 0110 011E 0135 00C2 0078 0084 009B 0060 00DE 0130 0126 0146 014E 0165 017A 0149 0125 013C室0131 013C室016E 019F 011D 014E 013A 0132 01A3 018D 015F 0151 0124 0133 0148 013F 014A 0151 016B 012D 01D4 01B7 0142 015E 01C5 01E7 014F 0117 014A 01B4 01C5 0111 0118 0132 00F5 0124 0111 0147 0167 0155 0183 0176 00F8 0106 011D 0112 011D 0124 013E 0100 018F 018D 0186 0133 011C 0141 0134 0105 0115 012C 0121 012C 0133 01E2 019B 01D9 0129 01BE 01DA 011A 014C 0125 0182 0103 015F 01A7 01CE 2259 0160 00AF 0082 008C 0066 0085 006E 00CB

或不帶空格

04530472045B048004720445043E0469045E04690470 048A044C047D0469046104800069048D047F045204600477046C0477047E0498045A048B0477046F048E0477049C00B80110011E013500C200780084009B006000DE013001260146014E017A016501490125013C0131013C016E019F011D014E013A013201A3018D015F0151012401330148013F014A0151016B012D01D401B70142015E01C501E7014F0117014A01B401C501110118013200F5012401110147016701550183017600F80106011D0112011D0124013E0100018F018D01860133011C0141013401050115012C0121012C013301E2019B01D9012901BE01DA011A014C012501820103015F01A701CE2259016000AF0082008C00660085006E00CB

我怎麼能壓縮它,我希望有一個最短hexoutput串

+0

嘗試使用ASCII加密解密方法 –

回答

1

h2s需要把輸入字符串轉換成合理的部分功能。正如here所做的那樣,在你的代碼中,使用了Split() - 在空間上 - 。在這種情況下,你可以去無零填充

Right("0000" & Hex(AscW(a(i))+AscW(Mid(k,y,1))), 4) 
s2h

。或者,您可以保留填充並使用中的s2h = Join(a, "")以獲得無空格的4個十六進制數字塊的字符串; h2s然後 不能使用Split(),但有點像

Function h2s(h) 
    ReDim a((Len(h) \ 4) - 1) 
    Dim p : p = 1 
    Dim i 
    For i = 0 To UBound(a) 
     WScript.Echo Mid(h,p,4) 
     a(i) = ChrW("&H" & Mid(h,p,4)) 
     p = p + 4 
    Next 
    h2s = Join(a, "") 
End Function