c语言异或操作不能还原,C语言异或及文件操作之疑惑

c语言异或操作不能还原,C语言异或及文件操作之疑惑异或 逻辑运算 运算规则为 T F T T T F F F F 并且有 a b c b a c 因此可以简单的利用该方法加密解密 我使用了如下的程序 includeconst 0x49 intmain intargc char argv FILE f NULL FILE p NULL chara 0 charb

异或,逻辑运算,运算规则为:T^F=T, T^T = F, F^F = F。并且有 a = b^c, b = a^c。

因此可以简单的利用该方法加密解密。我使用了如下的程序:

#include

const char c = 0x49;

int main(int argc, char *argv[])

{

FILE *f = NULL;

FILE *p = NULL;

char  a = 0;

char  b = 0;

f = fopen(“text.txt”, “r”);

if (NULL == f)

{

printf(“Error 1./n”);

exit(0);

}

p = fopen(“text1.txt”, “w”);

if (NULL == p)

{

fclose(f);

printf(“Error 2./n”);

exit(0);

}

while (fscanf(f, “%c”, &a) != EOF)

{

b = c ^ a;

printf(“%c -> %02X/n”, a, b);

fprintf(p, “%c”, b);

}

fclose(f);

fclose(p);

return 0;

}

这段程序使用的text.txt 仅为拥有14个字符“ABCDEFGHIJKLMN”的文件,运行过程中屏幕输出为:

A -> 08

B -> 0B

C -> 0A

D -> 0D

E -> 0C

F -> 0F

G -> 0E

H -> 01

I -> 00

J -> 03

K -> 02

L -> 05

M -> 04

N -> 07

这些都没有问题,但是输出的text1.txt有15个字节,使用UltraEdit查看16静止会发现在B之后C之前(即0B和0A之间出现了一个0D),虽然我知道Windows平台下 /r/n经常成对出现,但是我没有使用你你就不要出来嘛。

然后将上述程序修改一下,将text1中的内容再异或一次输出到text2中去,屏幕输出结果为:

08 -> A

0B -> B

0A -> C

0D -> D

0C -> E

0F -> F

0E -> G

01 -> H

00 -> I

03 -> J

02 -> K

05 -> L

04 -> M

07 -> N

可以看到并没有那个0D(本来应该是第三个)存在,并且text2.txt只有14个字节。

我没有明白这是什么原因,很神奇啊。

我在Ubuntu9.04 下边实验了一下,text文件就是15个字节,第一次运行的时候可以看到最后一个字符不是N而是/n(0A),因此生成的text1也有15bytes,从text1到text2也是,最后一个字节又被转换为0A了。这三个文件都是15字节。这点不明白。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226448.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:53
下一篇 2026年3月16日 下午10:53


相关推荐

  • netapp管理地址_NETAPP存储系统管理员手册.doc

    netapp管理地址_NETAPP存储系统管理员手册.docNETAPP 存储系统管理员手册 NETAPP 存储系统管理员手册登录系统对 Filer 的操作有两种基本方式 一种是通过 telnet 方式登录到 Filer 用命令行方式对 Filer 进行管理 在提示符下输入 或 help 可以列出系统相关命令 如下所示 C3NAS02 gt haltnfsstats

    2026年3月18日
    1
  • Kafka与MQ的区别

    Kafka与MQ的区别作为消息队列来说 企业中选择 mq 的还是多数 因为像 Rabbit Rocket 等 mq 中间件都属于很成熟的产品 性能一般但可靠性较强 而 kafka 原本设计的初衷是日志统计分析 现在基于大数据的背景下也可以做运营数据的分析统计 而 redis 的主要场景是内存数据库 作为消息队列来说可靠性太差 而且速度太依赖网络 IO 在服务器本机上的速度较快 且容易出现数据堆积的问题 在比较轻量的场合下能够适用 R

    2026年3月19日
    1
  • 一键进入高通9008模式_如何进入高通模式

    一键进入高通9008模式_如何进入高通模式Android8.0高通PDAF调试-actuatorsensitivity有一说一遇到的问题点调试过程中发现进不来pdaf流程log显示如下:01-0108:08:54.42524146352Dmm-camera:<STATS_AF><LOW>3994:af_port_handle_module_event:HandleAFmoduleeventoftype:001-0108:08:54.42524146352

    2025年9月2日
    7
  • Mac下Pycharm的快捷键

    Mac下Pycharm的快捷键Mac 下 Pycharm 的快捷键

    2026年3月27日
    2
  • 搭建扣子智能体主要依赖哪些核心技术组件?

    搭建扣子智能体主要依赖哪些核心技术组件?

    2026年3月13日
    2
  • Linux下Centos7对外开放端口

    Linux下Centos7对外开放端口概要最近在docker下搭建MySQL和Redis环境,远程linux主机内部网络都走通了,但是就是外网无法连接远程服务器的MySQL和Redis。经过一番查找和学习,终于找到了问题,不仅远程服务器上docker要做好内部和外部端口的映射,关键还要对对外开放的端口添加到防火墙中。内容介绍的逻辑是:本篇文章先记录Centos7下查看防火墙状态和网络状态命令;下一篇将介绍通过docker…

    2025年9月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号