我有一个用密钥加密和解密字符串的代码
<%
Dim a, string, key
string = "АБВГДЕЁЖЗИЙКЛМНОП РСТУФХЦЧШЩЪЫЬЭЮЯZàáâ{'-+/}äãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð~!@#$%^"
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 017A 0165 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
或没有空格
04530472045B048004720445043E0469045E04690470048A044C047D0469046104800069048D047F045204600477046C0477047E0498045A048B0477046F048E0477049C00B80110011E013500C200780084009B006000DE013001260146014E017A016501490125013C0131013C016E019F011D014E013A013201A3018D015F0151012401330148013F014A0151016B012D01D401B70142015E01C501E7014F0117014A01B401C501110118013200F5012401110147016701550183017600F80106011D0112011D0124013E0100018F018D01860133011C0141013401050115012C0121012C013301E2019B01D9012901BE01DA011A014C012501820103015F01A701CE2259016000AF0082008C00660085006E00CB
我如何压缩它,我想要一个最短的hexoutput字符串
答案 0 :(得分:1)
函数h2s
需要将输入字符串分解为合理的部分。完成here并在您的代码中使用Split() - on space - 。在这种情况下,你可以没有零填充
Right("0000" & Hex(AscW(a(i))+AscW(Mid(k,y,1))), 4)
s2h
中的。或者,您可以保留填充并使用s2h = Join(a, "")
中的s2h
来获取一个包含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