c语言异或操作

如题所述

c语言异或加密实现的原理为,将任意值,与相同值两次异或后,结果与原值相同。所以可以通过将源数据与一个固定的值(秘钥key)异或后,得到密文,然后将密文再次与秘钥异或,得到原文。这样就实现了异或加密及解密。
c语言中的异或是一种按位操作的计算,其计算原理为,操作数对应位上的值相同,则结果位上值为0,否则为1.异或的运算符号为^,于是真值表如下:
0^0=0
0^1=1
1^0=1
1^1=0
这样区分源数据和秘钥值,有如下四种可能:
0^0=0
0^0=0
0^1=1
1^1=0
1^0=1
1^0=1
1^1=0
0^1=1
以上是将一个值,用另一个值连续异或两次后的计算过程,可以看到,最终的值与原始值是相同的。这就是异或加密的基础原理。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-12
你是打算对数字进行异或,需要将字符变成数字,异或完后再变回字符
我只简单写了一下,没有异常处理,顺便说你b中F少了一个
#include
int
ctoi(char
c)
{
if(c>='0'&&c<='9')
return
c-48;
else
if(c>='A'&&c<='F')
return
c-55;
else
if(c>='a'&&c<='f')
return
c-87;
else
return
-1;
}
char
itoc(int
i)
{
if(i>=0&&i<=9)
return
i+48;
else
if(i>=10&&i<=15)
return
i+55;
else
return
0;
}
int
main()
{
char
*a="0000400000123456";
char
*b="0592389FFFFFFFFF";
char
*c="0000000000000000";
int
i=0;
int
ai,bi,ci;
while(a[i])
{
ai=ctoi(a[i]);
bi=ctoi(b[i]);
ci=ai^bi;
c[i]=itoc(ci);
i++;
}
printf("%s\n",c);
return
0;
}
相似回答