看到一个大牛的代码

wzuxian2012 2012-06-13 09:24:13
#include <stdio.h>
FILE *fi,*fo;
void main() {
fo=fopen("new.ini","wb");
fi=fopen("old.ini","rb");
fseek(fi,-1L,SEEK_END); //最后一个字符是eof吗?所以才 是-1
while (1) {
fputc(fgetc(fi)^0xA5,fo);
if (fseek(fi,-2,SEEK_CUR)) break; //神马意思啊?
}
fclose(fi);
fclose(fo);
}



问题3:

void fun(char* &);

string a;

fun((a.str())[0]);

为什么对???
...全文
270 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
不一样,不过区别仅仅是生成的密文文件头尾倒置了而已

从密码学角度来说,这种倒置没有任何意义

异或也不是不能用来加密,相反它可以是一种很安全的加密,前提是你的密钥——这个代码中是0xA5,必须是个随机或者伪随机的

广泛应用的流密码,就是由流密码的移位反馈生成器生成伪随机密钥流,在对明文加密

倒置纯粹是增加流程复杂度,降低加密速度,却得不到任何安全性的2B做法
wzuxian2012 2012-06-13
  • 打赏
  • 举报
回复
你们说,它从尾部逆行 加密



从头部开始加密

效果一样吧??

while(1)
{
fputc(fgetc(file)~ox5a,newfile);

if( fseek(file,1,SEEK_CUR ) )
break;


}



flylee 2012-06-13
  • 打赏
  • 举报
回复
fseek(fi,-2,SEEK_CUR) 的写法是多么的猥琐,大牛不会写这种

异或无非把是1的位置反转,这种加密根本没用
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
哥用sse汇编写个异或算法加密,就算加上字节倒置,也能写的比普通的memcpy还快,因为本身就没有计算复杂度,不加字节倒置,几乎就是内存IO极限的速度,sse一条机器指令就能加密16个字节
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
确实是加密没错,每个字节都异或0xA5,并且字节完全倒置,如果再运行一遍应该能还原

但是我对楼主说的这个人是不是大牛深感怀疑

有如下几点莫名其妙

这个流程,从最后一字节开始加密,往回偏移,fgetc又导致往后偏移了一字节,所以最后要往回偏移两字节,比较丑也比较慢的做法。这时候宁可用fread读块,在内存中加密倒置完再写回去。

而且,异或再倒置就算加密了?这样的“人才”进了工作岗位,怪不得CSDN会被盗号了

wzuxian2012 2012-06-13
  • 打赏
  • 举报
回复
咱不说第三个,第三个是错误的,不好意思啊

接着说第二个, 第二个加密,

我看大牛的写法说,这是加密


加什么米啊

乱七八糟的,搞了整个文件都报废了

要么从开是读到尾部,要么从尾部读到开头,

跳2个的这种法子,无法理解






[Quote=引用 3 楼 的回复:]

第二个不就是从现在位置往回偏移2字节么

第三个谁说是对的,根本不是一个类型,怎么传参
[/Quote]
qq120848369 2012-06-13
  • 打赏
  • 举报
回复
windows和linux虽然在文本模式下不一样,但二进制模式还是一致的,fseek 0 SEEK_END是定位到最后一个字节之后,所以-1 SEEK_END毋庸置疑。
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
第二个不就是从现在位置往回偏移2字节么

第三个谁说是对的,根本不是一个类型,怎么传参
wzuxian2012 2012-06-13
  • 打赏
  • 举报
回复
总不能 fseek(,0,SEEK_END)吧

其他问题呢?

大牛
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
eof不是在文件中真实存在的字符

他的意思仅仅是定位到文件最后一个字节而已

eof的概念是挺迷惑人的,而且陷阱多多,基本每个初学者都会遇到不理解的情况,最简单的办法就是——不用,文件在你手里,长度知道,想怎么读怎么写怎么偏移可以完全控制。

既然eof在文件中并不真实存在,是个抽象的符号,那么你干脆就当没有eof这个概念自然也不会有什么问题,反而更直观……

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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