word文档经过base64编码后,如何正确解码?

gobest28 2007-04-18 04:31:36
在foxmail中,我加入了一个word附件,现在要用程序分离出这个附件,但是我把该word编码后的信息拷入base64解码程序中,解码出错!但是解码文本附件时能够正确解码,请各位大侠帮帮忙啊!
小弟初来,没有很高的积分,请见凉!
在此,先谢谢各位了!
...全文
1809 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
bin8023xiang 2010-08-24
  • 打赏
  • 举报
回复
同样的问题,整个word文档编码之后,不能解码出来???
sinbad0527 2007-05-08
  • 打赏
  • 举报
回复
CBase64Coder用这个类解出的是没有问题的
277894613 2007-05-07
  • 打赏
  • 举报
回复
应该不会有问题吧,你弄个空的word,然后跟踪一下二进制
sinbad0527 2007-05-07
  • 打赏
  • 举报
回复
http://www.motobit.com/util/base64-decoder-encoder.asp
用这个在线的解码是成功的,对于doc文档
sinbad0527 2007-05-07
  • 打赏
  • 举报
回复
我也是遇到这样的问题,txt解码正常,但是doc和rar的解码失败
ok1234567 2007-04-30
  • 打赏
  • 举报
回复
我说的安全不是保密的意思
是指这些编码是被最落后的路由设备良好支持的,不会出现因为二意而使传输失败

一种如此简单的编码与保密毫无关联!
halve 2007-04-30
  • 打赏
  • 举报
回复
计算机可不长眼睛 ;)
应该是ok1234567(ok1234567)说的为了安全性,记得之前在哪也有看到这说法
b2b160 2007-04-30
  • 打赏
  • 举报
回复
to ok1234567(ok1234567)
base64是以牺牲空间换安全性的办法 吗?

BASE64的编码输出明眼人一看就知道吧.

应该是为了传输的.



b2b160 2007-04-30
  • 打赏
  • 举报
回复
/*
我写的这个看能否用
Base64编码解码库文件
作者:XXX
日期:2006年11月21日
描述:提供Base64编码解码功能.
*/
#ifndef _CODEBASE64_H_
#define _CODEBASE64_H_

long Base64_Encode(char *strIn, char *strOut, long lLen);
long Base64_Decode(char *strIn, char *strOut, long lLen);
void Encode3Byte(char *strIn, char *strOut);
void Encode2Byte(char *strIn, char *strOut);
void Encode1Byte(char *strIn, char *strOut);
long Decode4Byte(char *strIn, char *strOut);
BYTE GetIndexByCode(char cCode);

static char BaseCodeChar[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

// 编码输出strIn 输入字节, strOut 输出字节, lLen 字节长度, 返回输出长度
long Base64_Encode(char *strIn, char *strOut, long lLen)
{
long lOutIndex=0;
long lLoop=0;
for(lLoop=0; lLoop<lLen; lLoop += 3)
{
if( (lLoop+3)<=lLen )
Encode3Byte(strIn+lLoop, strOut+lOutIndex);
else if((lLoop+2)==lLen)
Encode2Byte(strIn+lLoop, strOut+lOutIndex);
else if((lLoop+1)==lLen)
Encode1Byte(strIn+lLoop, strOut+lOutIndex);
lOutIndex += 4;
}

strOut[lOutIndex] = '\0';
return lOutIndex;
}

// 解码输出strIn 输入字节, strOut 输出字节, lLen 字节长度, 返回输出长度
long Base64_Decode(char *strIn, char *strOut, long lLen)
{
long lOutIndex = 0;
long lLoop = 0;
if((lLen % 4) != 0 )
return 0;
for(lLoop = 0; lLoop<lLen; lLoop += 4)
{
lOutIndex += Decode4Byte(strIn+lLoop, strOut+lOutIndex);

}

return lOutIndex;
}

void Encode3Byte(char *strIn, char *strOut)
{
strOut[0] = BaseCodeChar[strIn[0]>>2];
strOut[1] = BaseCodeChar[((strIn[0] & 0x3)<<4) + (strIn[1]>>4)];
strOut[2] = BaseCodeChar[((strIn[1] & 0xF)<<2) + (strIn[2]>>6)];
strOut[3] = BaseCodeChar[strIn[2] & 0x3F];
}

void Encode2Byte(char *strIn, char *strOut)
{
strOut[0] = BaseCodeChar[strIn[0]>>2];
strOut[1] = BaseCodeChar[((strIn[0] & 0x3)<<4) + (strIn[1]>>4)];
strOut[2] = BaseCodeChar[(strIn[1] & 0xF)<<2];
strOut[3] = '=';
}

void Encode1Byte(char *strIn, char *strOut)
{
strOut[0] = BaseCodeChar[strIn[0]>>2];
strOut[1] = BaseCodeChar[(strIn[0] & 0x3)<<4];
strOut[2] = '=';
strOut[3] = '=';
}

// 解码四个字节,并返回解出的字节数 strIn输入字节,strOut输出字节
long Decode4Byte(char *strIn, char *strOut)
{
long lPadByteCount=0;

if(strIn[3] == '=')
lPadByteCount++;
if(strIn[2] == '=')
lPadByteCount++;

strOut[0] = (GetIndexByCode(strIn[0])<<2) + (GetIndexByCode(strIn[1])>>4);
if(lPadByteCount<2)
strOut[1] = (GetIndexByCode(strIn[1])<<4) + (GetIndexByCode(strIn[2])>>2);
if(lPadByteCount<=1)
strOut[2] = (GetIndexByCode(strIn[2])<<6) + (GetIndexByCode(strIn[3]));

return (3-lPadByteCount);
}

// 按编码返回编码所代表的数据
BYTE GetIndexByCode(char cCode)
{
BYTE bRet=0;
for(long lLoop=0; lLoop<64; lLoop++)
{
if(BaseCodeChar[lLoop] == cCode)
{
bRet = lLoop & 0xFF;
}
}
return bRet;
}
#endif
kangji 2007-04-30
  • 打赏
  • 举报
回复
FOXMAIL默认好像不是用BASE64吧
halve 2007-04-30
  • 打赏
  • 举报
回复
试了下, doc文件 Base64 编码解码成功
我想,最有可能的是你写的 en/de 程序有问题
这里有个在线 en/de 程序,你可以比照下:
http://www.motobit.com/util/base64-decoder-encoder.asp
ok1234567 2007-04-29
  • 打赏
  • 举报
回复
常用的E-MAIL编码有4、5种
base64是被最广泛支持的编码方式
任何字节流都被编码为与任何传输控制符号无关的符号:
英文26字母的大小写,10个数字,+/两个符号,解码的时候还原为字节流

所以没有超出范围的说法
base64是以牺牲空间换安全性的办法
ok1234567 2007-04-28
  • 打赏
  • 举报
回复
//---- base64 decoder with c ----------
#define OK (0)
#define FAIL (-1)
#define BUFOVER (-2)

#define CHAR64(c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)])

static char basis_64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????";

static char index_64[128] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
};

//---------------------------------

int Base64Decode(const char *in, unsigned int inlen, char *out, unsigned int *outlen)
{
//--ATT: remove \r\n before!

unsigned len = 0;
unsigned lup;
int c1;
int c2;
int c3;
int c4;

if (inlen >= 2 && in[0] == '+' && in[1] == ' ')
in += 2, inlen -= 2;

if (*in == '\0')
return FAIL;

for (lup = 0; lup < inlen / 4; lup++) {
c1 = in[0];
if (CHAR64(c1) == -1)
return FAIL;
c2 = in[1];
if (CHAR64(c2) == -1)
return FAIL;
c3 = in[2];
if (c3 != '=' && CHAR64(c3) == -1)
return FAIL;
c4 = in[3];
if (c4 != '=' && CHAR64(c4) == -1)
return FAIL;
in += 4;
*out++ = (CHAR64(c1) << 2) | (CHAR64(c2) >> 4);
++len;
if (c3 != '=') {
*out++ = ((CHAR64(c2) << 4) & 0xf0) | (CHAR64(c3) >> 2);
++len;
if (c4 != '=') {
*out++ = ((CHAR64(c3) << 6) & 0xc0) | CHAR64(c4);
++len;
}
}
}

*out = 0;
*outlen = len;

return OK;
}
ok1234567 2007-04-28
  • 打赏
  • 举报
回复
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
以上是base64的64个符号
其编码是为了数据安全通过各种路由,全宇宙统一的:)
编解码原理非常简单,三个字节编码为四个字节 (3*8=4*6),
所以编解码程序一般都不会有问题(但不能保证),多找几个试试
gobest28 2007-04-28
  • 打赏
  • 举报
回复
看来真的没人能解答我的问题了
遗憾啊……
halve 2007-04-28
  • 打赏
  • 举报
回复
base64编码都是 6bit 来的,跟你的文件格式没啥关系吧,没有超出范围这一说
lmkong 2007-04-28
  • 打赏
  • 举报
回复
理论上不论什么格式的附件的解码方式都一样,但是我怀疑由于word自身的限制,使用了大量的字符,可能超出了范围,才造成了这个问题
lmkong 2007-04-28
  • 打赏
  • 举报
回复
我也遇到这个问题,我现在可以解.rar /.jpg/.txt等附件,但是就是 不能解WORD附件,我现在在做附件的编码呢,有兴趣探讨的请加我QQ:30589670
嗷嗷叫的老马 2007-04-21
  • 打赏
  • 举报
回复
邮件的BASE64是标准的....大家都是一样

不然FOX发的MAIL岂不是只有FOX才可以解出来了?!
yecheng_110 2007-04-21
  • 打赏
  • 举报
回复
http://www.rfc-editor.org/
RFC4648
加载更多回复(8)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧