在没有原文件的情况下,如何直接显示其内容

naixian1983 2008-08-07 10:08:45
现在有一个文件"1.txt",当我用AES加密后,生成另外一个文件“1.txt.en",按理来说,当文件解密时,会生成回原文件”1.txt",但现在要求在解密的过程中,在不生成文件“1.txt"的情况下,直接显示解密后的文件”1.txt“的内容,如何做到?
...全文
152 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatws 2008-08-07
  • 打赏
  • 举报
回复
既然是txt,可以用CString来进行+=操作,然后显示就行了
naixian1983 2008-08-07
  • 打赏
  • 举报
回复
如何把数据ouBuff一块块地读出,再用SetWindowText显示出来?
用户 昵称 2008-08-07
  • 打赏
  • 举报
回复
这个问题就是不存文件就可以了。
cnzdgs 2008-08-07
  • 打赏
  • 举报
回复
把文件数据一次全部读出,全部解密,然后不写文件,直接使用解密后的数据,用SetWindowText显示到控件上。
shinefen 2008-08-07
  • 打赏
  • 举报
回复
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput);
aes.InvCipher(inBuff,ouBuff);
// fwrite(ouBuff,1,16,foutput);
CArray[i] = ouBuff; //??这样可以的吗?,最后做完所有东西再把CARRY写到文件
}
....>>>>>>>>

scq2099yt 2008-08-07
  • 打赏
  • 举报
回复
解密过程都是在内存缓冲区中操作的,不保存文件就是了,直接把解密后的内存数据设置到窗口里显示
shinefen 2008-08-07
  • 打赏
  • 举报
回复
在解码中不写进文件,而是写进内存就得拉~用变量存就可以拉 例如CArray
最后确认才写文件~~

??
naixian1983 2008-08-07
  • 打赏
  • 举报
回复
up
naixian1983 2008-08-07
  • 打赏
  • 举报
回复
这个就是解密原代码了,如何不生成文件直接将其内容显示出来




UpdateData(true);
if(EnDe_filename1=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename1,"rb");
if(!finput)
{


AfxMessageBox("Open file failed");

return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput);
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;


EnDe_filename1+=".de";


foutput=fopen((LPCTSTR)EnDe_filename1.Left((EnDe_filename1.GetLength()-6)),"wb");


unsigned char inBuff[25],ouBuff[25];



Aes aes(16,(unsigned char*)(LPCTSTR)m_DeKey);
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput);
aes.InvCipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);

}
fclose(finput);
fclose(foutput);

}


谢谢大家了
jameshooo 2008-08-07
  • 打赏
  • 举报
回复
解密过程都是在内存缓冲区中操作的,不保存文件就是了,直接把解密后的内存数据设置到窗口里显示
bestoml 2008-08-07
  • 打赏
  • 举报
回复
可能它现在的AES源码是bool CAESWrapper::DecryptMS(CString srcPath,CString DestPath);
只要进去改一下就行了....反正都是有字符流才能写文件的.
ouyh12345 2008-08-07
  • 打赏
  • 举报
回复
解密后,写文件和显示出来,差别很大吗?
bestoml 2008-08-07
  • 打赏
  • 举报
回复
aes加解密都是在内存中进行的吧?有源码的话,你会看到他是一块块解密的,你只要修改解密的函数让它不要保存成文件,而只是保存在CHAR*里面,那就就可以不用写文件显示内容了.
sunyim 2008-08-07
  • 打赏
  • 举报
回复
应该是先得到1.txt的内容,然后生成1.txt文件啊
schlafenhamster 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jameshooo 的回复:]
解密过程都是在内存缓冲区中操作的,不保存文件就是了,直接把解密后的内存数据设置到窗口里显示
[/Quote]
ringphone 2008-08-07
  • 打赏
  • 举报
回复
看看你注释掉的代码:// fwrite(ouBuff,1,16,foutput);
他是只写16字节到文件中,你换成str3=ouBuff;把所有内容都接收了,应该把str3截断,只取前面16个字符
naixian1983 2008-08-07
  • 打赏
  • 举报
回复
就差那么一点了,


CString str3,Addstr;
unsigned char ouBuff[25];

long blocknum=lFileLen/16;

Aes aes(16,(unsigned char*)(LPCTSTR)m_DeKey);
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput);
aes.InvCipher(inBuff,ouBuff);
// fwrite(ouBuff,1,16,foutput);

str3=ouBuff;
Addstr+=str3;

}

m_rich.SetWindowText(Addstr);






原来文件内是这样的

1=D:\HOOK2\TaskBarDll\weigh and size.xls
2=D:\HOOK2\weigh and size.xls


但解密后却变成这样

1=D:烫烫烫烫烫烫K_\HOOK2\TaskBarDl烫烫烫烫烫烫K_l\weigh and size烫烫烫烫烫烫K_.xls
2=D:\HOOK2烫烫烫烫烫烫K_\weigh and size.烫烫烫烫烫烫K_xls

为什么是这样呢?
yayafu 2008-08-07
  • 打赏
  • 举报
回复
只不过一个是写在硬盘上,一个写在内存里嘛,楼主想不明白吗?

16,471

社区成员

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

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

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