求一个文件加密类

云满笔记 2013-07-04 11:41:32
最好是脱离界面框架的,如MFC、WTL等的,有没有,我现在在用WTL,基于WTL的也可以,对纯文本文件的加密乱码都行,不过要能解出来的
...全文
254 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-04-10
  • 打赏
  • 举报
回复
引用 27 楼 u012997273 的回复:
[quote=引用 26 楼 zhao4zhong1 的回复:] [quote=引用 25 楼 zhao4zhong1 的回复:] 不妨试试将“I love you!”加密一下看看是啥,然后再试试将加密后的内容给别人让他解密试试。
{/5#z?,56z 7B 2F 35 23 7A 3F 2C 35 36 7A 13 [/quote] 这样,貌似也没啥难度,在od,ida面前,你这个demo没有遮羞布[/quote] 理论上不公开算法的加密,哪怕算法很简单,解密也会很困难。
u012997273 2014-04-10
  • 打赏
  • 举报
回复
引用 26 楼 zhao4zhong1 的回复:
[quote=引用 25 楼 zhao4zhong1 的回复:] 不妨试试将“I love you!”加密一下看看是啥,然后再试试将加密后的内容给别人让他解密试试。
{/5#z?,56z 7B 2F 35 23 7A 3F 2C 35 36 7A 13 [/quote] 这样,貌似也没啥难度,在od,ida面前,你这个demo没有遮羞布
赵4老师 2013-07-05
  • 打赏
  • 举报
回复
引用 25 楼 zhao4zhong1 的回复:
不妨试试将“I love you!”加密一下看看是啥,然后再试试将加密后的内容给别人让他解密试试。
{/5#z?,56z 7B 2F 35 23 7A 3F 2C 35 36 7A 13
赵4老师 2013-07-05
  • 打赏
  • 举报
回复
不妨试试将“I love you!”加密一下看看是啥,然后再试试将加密后的内容给别人让他解密试试。
BeanJoy 2013-07-05
  • 打赏
  • 举报
回复
引用 23 楼 zhao4zhong1 的回复:
[quote=引用 20 楼 jack960330 的回复:] [quote=引用 19 楼 zhao4zhong1 的回复:] [quote=引用 18 楼 jack960330 的回复:] [quote=引用 3 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
我可以说,单单用异或加密的算法,对于有心破解的人根本没有难度 [/quote] 我这个代码是“单单用异或加密”吗?[/quote] fputc(fgetc(fi)^0x5A,fo);不是吗?与0x5A异或[/quote] 那这句啥意思捏?
if (fseek(fi,-2,SEEK_CUR)) break;
[/quote] 这是从文件尾到文件头进行异或进行加密吧。
赵4老师 2013-07-05
  • 打赏
  • 举报
回复
引用 20 楼 jack960330 的回复:
[quote=引用 19 楼 zhao4zhong1 的回复:] [quote=引用 18 楼 jack960330 的回复:] [quote=引用 3 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
我可以说,单单用异或加密的算法,对于有心破解的人根本没有难度 [/quote] 我这个代码是“单单用异或加密”吗?[/quote] fputc(fgetc(fi)^0x5A,fo);不是吗?与0x5A异或[/quote] 那这句啥意思捏?
if (fseek(fi,-2,SEEK_CUR)) break;
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
引用 21 楼 jack960330 的回复:
然后写入文件
文件
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
然后写入二年级
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
引用 19 楼 zhao4zhong1 的回复:
[quote=引用 18 楼 jack960330 的回复:] [quote=引用 3 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
我可以说,单单用异或加密的算法,对于有心破解的人根本没有难度 [/quote] 我这个代码是“单单用异或加密”吗?[/quote] fputc(fgetc(fi)^0x5A,fo);不是吗?与0x5A异或
赵4老师 2013-07-05
  • 打赏
  • 举报
回复
引用 18 楼 jack960330 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
我可以说,单单用异或加密的算法,对于有心破解的人根本没有难度 [/quote] 我这个代码是“单单用异或加密”吗?
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
我可以说,单单用异或加密的算法,对于有心破解的人根本没有难度
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
引用 16 楼 jack960330 的回复:
我有个简单的基于表加密的加密算法 [code=H] #ifdef MSG_EXPORTS #define MSG_API __declspec(dllexport) #else #define MSG_API __declspec(dllimport) #endif class MSG_API MSG_ENCRYPT { public: MSG_ENCRYPT(void); ~MSG_ENCRYPT(void); void Encrytion(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize); void Decrypt(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize); private: static const int Encrypt[256]; static const int Deciphering[256]; }; [/code] [code=CPP] #include "stdafx.h" #include "数据加密模块.h" //静态变量,加解密表 const int MSG_ENCRYPT::Encrypt[256]= { 加密编码映射表 }; const int MSG_ENCRYPT::Deciphering[256]= { 解密编码映射表 }; //成员函数 MSG_ENCRYPT::MSG_ENCRYPT(void) { return; } MSG_ENCRYPT::~MSG_ENCRYPT(void) { return; } void MSG_ENCRYPT::Encrytion(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize) { unsigned char *pKeydata=new unsigned char[KeySize]; memcpy(pKeydata,pkey,KeySize); for(int i=0;i<KeySize;i++) { pKeydata[i]=Encrypt[pKeydata[i]]; } for(int i=0;i<Size;i++) { pdata[i]=Encrypt[pdata[i]]; } for(int i=0;i<Size;i++) { pdata[i]^=pKeydata[i%KeySize]; } delete []pKeydata; return; } void MSG_ENCRYPT::Decrypt(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize) { unsigned char *pKeydata=new unsigned char[KeySize]; memcpy(pKeydata,pkey,KeySize); for(int i=0;i<KeySize;i++) { pKeydata[i]=Encrypt[pKeydata[i]]; } for(int i=0;i<Size;i++) { pdata[i]^=pKeydata[i%KeySize]; } for(int i=0;i<Size;i++) { pdata[i]=Deciphering[pdata[i]]; } delete []pKeydata; return; } [/code] 至于密码表的具体内容,我还是不给你了,因为我现在编写的程序刚好就是用那个加密密码表 这个思路其实很容易想到,所以我把具体算法给你了,如果有什么疑问,你可以加我Q:744439622,欢迎交个朋友,哈哈

#ifdef MSG_EXPORTS
#define MSG_API __declspec(dllexport)
#else
#define MSG_API __declspec(dllimport)
#endif

class MSG_API MSG_ENCRYPT
{
public:
	MSG_ENCRYPT(void);
	~MSG_ENCRYPT(void);
	void Encrytion(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize);
	void Decrypt(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize);
private:
	static const int Encrypt[256];
	static const int Deciphering[256];
};
欧阳春晖 2013-07-05
  • 打赏
  • 举报
回复
我有个简单的基于表加密的加密算法 [code=H] #ifdef MSG_EXPORTS #define MSG_API __declspec(dllexport) #else #define MSG_API __declspec(dllimport) #endif class MSG_API MSG_ENCRYPT { public: MSG_ENCRYPT(void); ~MSG_ENCRYPT(void); void Encrytion(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize); void Decrypt(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize); private: static const int Encrypt[256]; static const int Deciphering[256]; }; [/code] [code=CPP] #include "stdafx.h" #include "数据加密模块.h" //静态变量,加解密表 const int MSG_ENCRYPT::Encrypt[256]= { 加密编码映射表 }; const int MSG_ENCRYPT::Deciphering[256]= { 解密编码映射表 }; //成员函数 MSG_ENCRYPT::MSG_ENCRYPT(void) { return; } MSG_ENCRYPT::~MSG_ENCRYPT(void) { return; } void MSG_ENCRYPT::Encrytion(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize) { unsigned char *pKeydata=new unsigned char[KeySize]; memcpy(pKeydata,pkey,KeySize); for(int i=0;i<KeySize;i++) { pKeydata[i]=Encrypt[pKeydata[i]]; } for(int i=0;i<Size;i++) { pdata[i]=Encrypt[pdata[i]]; } for(int i=0;i<Size;i++) { pdata[i]^=pKeydata[i%KeySize]; } delete []pKeydata; return; } void MSG_ENCRYPT::Decrypt(unsigned char * pdata, unsigned char * pkey, size_t Size,size_t KeySize) { unsigned char *pKeydata=new unsigned char[KeySize]; memcpy(pKeydata,pkey,KeySize); for(int i=0;i<KeySize;i++) { pKeydata[i]=Encrypt[pKeydata[i]]; } for(int i=0;i<Size;i++) { pdata[i]^=pKeydata[i%KeySize]; } for(int i=0;i<Size;i++) { pdata[i]=Deciphering[pdata[i]]; } delete []pKeydata; return; } [/code] 至于密码表的具体内容,我还是不给你了,因为我现在编写的程序刚好就是用那个加密密码表 这个思路其实很容易想到,所以我把具体算法给你了,如果有什么疑问,你可以加我Q:744439622,欢迎交个朋友,哈哈
赵4老师 2013-07-04
  • 打赏
  • 举报
回复
记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
图灵狗 2013-07-04
  • 打赏
  • 举报
回复
最简单的就是直接异或。
引用 楼主 wan212000 的回复:
最好是脱离界面框架的,如MFC、WTL等的,有没有,我现在在用WTL,基于WTL的也可以,对纯文本文件的加密乱码都行,不过要能解出来的
云满笔记 2013-07-04
  • 打赏
  • 举报
回复
自己顶个先 求大神路过
believe_me 2013-07-04
  • 打赏
  • 举报
回复
用openssl库吧 aes一类的加密都很好
sumos 2013-07-04
  • 打赏
  • 举报
回复
我这几天正好在看cryptopp,著名的加密库。 下载之后可以直接编译, test.cpp中提供了sample,加密string,加密file
橡木疙瘩 2013-07-04
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
如果不看三楼代码的话,就算是我,也几乎无法破解。
已经知道是用一个固定字节去异或,那就就算是我也能破解——枚举法就行了。 至少你要准备一个长度可变的字节数组去异或吧:
 fputc(fgetc(fi)^key[i++],fo);
赵4老师 2013-07-04
  • 打赏
  • 举报
回复
如果不看三楼代码的话,就算是我,也几乎无法破解。
加载更多回复(8)

64,647

社区成员

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

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