永发信息网

用ASP对base64编码的"文件"进行还原

答案:2  悬赏:70  手机版
解决时间 2021-05-11 15:46

现在已经可以将“文件(比如word文档)”进行Base64编码,生成了字符串。

但是如何才能将这些字符串还原成原来的word文档(不是文档中的内容,而是整个文档)文件呢?

注意:

1、ASP语言

2、切忌是把“文档”文件进行编码,不是“字符串”进行编码

最佳答案
发个文件上来吧,你怎么肯定是base64加密的?
全部回答

收藏的一段代码,ASP的是用于BASE64的编解码的: <% sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)

'计算unicode字符串的Ansi编码的长度 Function strUnicodeLen(asContents) '计算unicode字符串的Ansi编码的长度 asContents1="a"&asContents len1=len(asContents1) k=0 for i=1 to len1 asc1=asc(mid(asContents1,i,1)) if asc1<0 then asc1=65536+asc1 if asc1>255 then k=k+2 else k=k+1 end if next strUnicodeLen=k-1 End Function

'将Unicode编码的字符串,转换成Ansi编码的字符串 Function strUnicode2Ansi(asContents) '将Unicode编码的字符串,转换成Ansi编码的字符串 strUnicode2Ansi="" len1=len(asContents) for i=1 to len1 varchar=mid(asContents,i,1) varasc=asc(varchar) if varasc<0 then varasc=varasc+65536 if varasc>255 then varHex=Hex(varasc) varlow=left(varHex,2) varhigh=right(varHex,2) strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh ) else strUnicode2Ansi=strUnicode2Ansi & chrb(varasc) end if next End function

'将Ansi编码的字符串,转换成Unicode编码的字符串 Function strAnsi2Unicode(asContents) '将Ansi编码的字符串,转换成Unicode编码的字符串 strAnsi2Unicode = "" len1=lenb(asContents) if len1=0 then exit function for i=1 to len1 varchar=midb(asContents,i,1) varasc=ascb(varchar) if varasc > 127 then strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar)) i=i+1 else strAnsi2Unicode = strAnsi2Unicode & chr(varasc) end if next End function

'将Ansi编码的字符串进行Base64编码 Function Base64encode(asContents) '将Ansi编码的字符串进行Base64编码 'asContents应当是ANSI编码的字符串(二进制的字符串也可以) Dim lnPosition Dim lsResult Dim Char1 Dim Char2 Dim Char3 Dim Char4 Dim Byte1 Dim Byte2 Dim Byte3 Dim SaveBits1 Dim SaveBits2 Dim lsGroupBinary Dim lsGroup64 Dim m4,len1,len2

len1=Lenb(asContents) if len1<1 then Base64encode="" exit Function end if

m3=Len1 Mod 3 If M3 > 0 Then asContents = asContents & String(3-M3, chrb(0)) '补足位数是为了便于计算 IF m3 > 0 THEN len1=len1+(3-m3) len2=len1-3 else len2=len1 end if lsResult = "" For lnPosition = 1 To len2 Step 3 lsGroup64 = "" lsGroupBinary = Midb(asContents, lnPosition, 3) Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3 Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15 Byte3 = Ascb(Midb(lsGroupBinary, 3, 1)) Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1) Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1) Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1) Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1) lsGroup64 = Char1 & Char2 & Char3 & Char4 lsResult = lsResult & lsGroup64 Next '处理最后剩余的几个字符 if M3 > 0 then lsGroup64 = "" lsGroupBinary = Midb(asContents, len2+1, 3) Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3 Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15 Byte3 = Ascb(Midb(lsGroupBinary, 3, 1)) Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1) Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1) Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1) if M3=1 then lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) '用=号补足位数 else lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) '用=号补足位数 end if lsResult = lsResult & lsGroup64 end if Base64encode = lsResult End Function

'将Base64编码字符串转换成Ansi编码的字符串 Function Base64decode(asContents) '将Base64编码字符串转换成Ansi编码的字符串 'asContents应当也是ANSI编码的字符串(二进制的字符串也可以) Dim lsResult Dim lnPosition Dim lsGroup64, lsGroupBinary Dim Char1, Char2, Char3, Char4 Dim Byte1, Byte2, Byte3 Dim M4,len1,len2 len1= Lenb(asContents) M4 = len1 Mod 4 if len1 < 1 or M4 > 0 then '字符串长度应当是4的倍数 Base64decode = "" exit Function end if

'判断最后一位是不是 = 号 '判断倒数第二位是不是 = 号 '这里m4表示最后剩余的需要单独处理的字符个数 if midb(asContents, len1, 1) = chrb(61) then m4=3 if midb(asContents, len1-1, 1) = chrb(61) then m4=2 if m4 = 0 then len2=len1 else len2=len1-4 end if

For lnPosition = 1 To Len2 Step 4 lsGroupBinary = "" lsGroup64 = Midb(asContents, lnPosition, 4) Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1 Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1 Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1 Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1 Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF) Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF) Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63)) lsGroupBinary = Byte1 & Byte2 & Byte3

lsResult = lsResult & lsGroupBinary Next

'处理最后剩余的几个字符 if M4 > 0 then lsGroupBinary = "" lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A,转换成值为0 if M4=2 then '补足4位,是为了便于计算 lsGroup64 = lsGroup64 & chrB(65) end if Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1 Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1 Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1 Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1 Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF) Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF) Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))

if M4=2 then lsGroupBinary = Byte1 elseif M4=3 then lsGroupBinary = Byte1 & Byte2 end if

lsResult = lsResult & lsGroupBinary end if

Base64decode = lsResult

End Function

'--------------------------------------------------------------------------------- response.write strUnicode2Ansi("abc我们d我们") & "<hr>" response.write strAnsi2Unicode(Base64encode(strUnicode2Ansi("abc我们d我们"))) & "<hr>"

response.write strAnsi2Unicode(Base64decode(Base64encode(strUnicode2Ansi("abc我们d我们")))) & "<hr>"

sdecode="Sm1haWy1xNb30qqyzsr9wdCx7Q0K1/fV36O6dG9ueTEzMiAgMjAwMC0wNS0yNNXixqq45bz+sbvU" sdecode=sdecode & "xLbBPT0xNTK0zg0KIA0KDQqhoaGh1/fV3yBb0ru/y10gDQqhoaGhIA0KoaGhoQ0KoaGhocu1w/ej" sdecode=sdecode & "urj8tuC1xNDFz6LH67LOv7xKbWFpbMu1w/ejrM7Sz+vV4tLRvq3X47m708O1xMHLoaMNCqGhoaEN"

response.write replace(strAnsi2Unicode(Base64decode(strUnicode2Ansi(sdecode))),chr(13)&chr(10),"<br>")

response.end

%>

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
英语chinatown和enough的音标
八一送给军人的一句话,怎么看出一个男人是自
左眼长了一条长长的睫毛,怎么回事?
神鬼传奇里面魔导士称号怎么获得?
笔记本1G的内存和2G的内存有多大的差别呢?
QQ幻想世界中的银锭如何换成银票
注销店铺后保证金没退回来,现在想再注册店铺
孩子身上起红点
公司给员工生日寄语,怎么帮帮领导给公司生日
求第八章散打刷图点
CS比CF强,对吧?
谁懂大学户口迁移的相关方面 要有亲身体验哦
阳瘘怎么办啊
锦州什么时候在那上映花木兰
学写宋词,学做诗词求教入门指导
推荐资讯
QQ飞车电信一区什么时候出新地图?电信二都有
直播QQLive提示节目需要 ×××kbps为什么?
嗯、关于高中哒文言文和古诗的阅读在考试时都
百叶套什么定额,UPS不间断电源套哪些定额
男生,女生。有真正的友谊吗????
谁有好的空间素材网站啊 ?
长痘痘用什么洗面奶,脸上长痘痘不能用洗面奶
一道关于分式的题
dnf42级狂战怎样赚钱快
国产手机的电源是什么样的,在主板的那个位子
要是爱一个人。他又没钱娶你,你该怎么办
摩托罗拉k1内存卡在手机里怎么找??那位兄弟
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?