2015-05-14 103 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 
相关问题