• c语言实现xor加密


    异或运算:^

    定义:它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

    特点:如果对一个值连续做两次 XOR,会返回这个值本身。

    1010 ^ 1111
    // 第一次异或后结果:0101
    0101 ^ 1111
    // 第二次异或后结果:1010

    上面代码中,原始值是1010,再任意选择一个值(上例是1111),做两次 XOR,最后总是会得到原始值1010。这 在数学上是很容易证明的。

    加密应用:

    XOR 的这个特点,使得它可以用于信息的加密。 

    message XOR key // cipherText 
    cipherText XOR key  //message

    上面代码中,原始信息是message,密钥是key,第一次 XOR 会得到加密文本cipherText。对方拿到以后,再用 key做一次 XOR 运算,就会还原得到message

    c语言实现:

    #include <stdio.h>
    #define key 0x86
    int main(int argc, char *argv[])
    {
        char text[100];
        int i,j;
        for(i=0;i<100;i++){
            text[i]=getchar();
            if(text[i]=='
    '){
                text[i]='';
                break;
            }
        }
        for(j=0;j<i;j++){
            text[j]=text[j] ^ key;
        }
        puts(text);
    
        for(j=0;j<i;j++){
            text[j]=text[j] ^ key;
        }
        puts(text);
    
        return 0;
    }

    或者:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define KEY 0x86
    int main()
    {
        char p_data[16] = {"Hello World!"};
        char Encrypt[16]={0},Decode[16]={0};
        int i;
        for(i = 0; i < strlen(p_data); i++)
        {
        Encrypt[i] = p_data[i] ^ KEY;
        }
        for(i = 0; i < strlen(Encrypt); i++)
        {
        Decode[i] = Encrypt[i] ^ KEY;
        }
    
        printf("Initial date:  %s
    ",p_data);
        printf("Encrypt date:  %s
    ",Encrypt);
        printf("Decode date:  %s
    ",Decode);
        
        return 0;
    
    }
  • 相关阅读:
    怎么修改android飞行模式wifi
    斐讯n1盒子装远程迅雷
    Spring使用大全
    面向对象7大设计原则
    Mybatis之SqlNode解析
    【转载】MongoDB的C#驱动程序教程
    【转载】 mongodb C# 基本类库
    【转载】列举MongoDB C#驱动的几个Query方法
    【转载】MongoDB开发学习
    【转载】sql全国省市区数据库建表过程
  • 原文地址:https://www.cnblogs.com/litifeng/p/9259813.html
Copyright © 2020-2023  润新知