设为首页收藏本站
查看: 284|回复: 4

C++文档加密

[复制链接]
  • TA的每日心情
    开心
    2018-9-5 13:36
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    发表于 2018-8-31 14:58:24 | 显示全部楼层 |阅读模式
    本帖最后由 枫子、 于 2018-8-31 15:01 编辑

    文档,可以分为普通文档和设备文档,普通文档又分为文档文件(ascll码)和二进制文档,加密可以分为字符流和位,此程序采用的是按字节加密 ;

    加密方式: ^=0x88   把加密的文档中锁定的那个字符异或十六进制88输出到另一个文本上,

    异或,打个比方   十进制 56                 转换为二进制     0011 1000
                              十六进制88                 转换为二进制     1000 1000


    异或就是把俩个位进行比较,相同为0 不同为1 ,那么

    00111000
    10001000
    -----------
    10110000

    得 176(十进制)  B0(十六进制)

    再来
    10110000
    10001000
    -----------
    00111000


    得到 56(十进制)

    也就是异或俩次会得到初始的那个数据,也就是 异或一次 加密,俩次解密

    剩下的操作看图 图片在压缩包内



    百度网盘: https://pan.baidu.com/s/1HrFUec-2to_9fQizEXo1hg

    源码:

    #include<tchar.h>
    #include<fstream>
    #pragma warning(disable:4996)
    using std::fstream;

    int _tmain(int argc, _TCHAR* argv[])
    {
            //代加密文件的流对象
            fstream befoneFile;
            fstream afterFile;
            //保存待加密文件
            char fileNameBefore[256] = { 0 };
            char fileNameAfter[256] = { 0 };

            //1、要求用户输入待加密文件名
            printf("请输入待加密的文件名:");
            scanf("%s", fileNameBefore);
            //2、打开文件
            befoneFile.open(fileNameBefore, std::ios::in | std::ios::binary/*字节流(不加binary,就是字符流)*/);
            //3、获取加密文件大小
            //3.1、定位文件内容指针到文件末尾
            befoneFile.seekg(0, std::ios::end);
            //3.2、获取文件内容指针到文件头的字节数        就是获取文件大小
            std::streamoff size = befoneFile.tellg();
            //3.3、定位文件内容指针到文件头
            befoneFile.seekg(0, std::ios::beg);
            //4、要求用户输入加密后文件名
            printf("请输入加密后文件名:");
            scanf("%s", fileNameAfter);
            //5、打开加密后文件
            afterFile.open(fileNameAfter, std::ios:ut | std::ios::binary);

            for (std::streamoff i = 0; i < size; i++)
                    afterFile.put(befoneFile.get() ^ 0x88);

            /*
                    复杂写法
                    char tmp;
                    for (std::streamoff i = 0; i < size; i++)
                    {
                            //6、逐字节读取待加密文件
                            tmp = befoneFile.get();
                            //7、加密
                            tmp ^= 0x88;
                            //8、写入加密后的文件
                            afterFile.put(tmp);
                    }
                    */
                    //9、关闭俩个文件
            befoneFile.close();
            afterFile.close();
            printf("加密or解密完毕!\n");
            while (1);
            return 0;
    }


    /*
    std::ios::in                        读取文件方式
    std::ios:ut                写入文件方式
    std::ios::binary                二进制方式
    std::ios::beg                文件头
    */



    代码中有一个惊讶的表情,我也不知道它是怎么出来的,表情==‘o’(字符  o)
  • TA的每日心情

    2018-8-31 15:58
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2018-8-31 15:59:06 | 显示全部楼层
    666666666666666
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-9-9 13:32
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2018-9-1 08:58:23 | 显示全部楼层
    谢谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    3 天前
  • 签到天数: 59 天

    [LV.5]常住居民I

    发表于 2018-9-5 22:31:39 | 显示全部楼层
    学到了,代码还可以这样。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 21:53
  • 签到天数: 142 天

    [LV.7]常住居民III

    发表于 2018-9-13 00:04:44 | 显示全部楼层
    谢谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /1 下一条

    红盟社区--中国红客联盟 

    Processed in 0.110331 second(s), 18 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表