zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    八、比卦
    七、师卦
    六、讼卦
    五、需卦
    力扣-两数之和
    什么是3NF (范式) ?
    SQL事务4个特性
    什么是索引?
    假设把只包含01的数组(如{0,0,1,1,1,0,1,0,0,1})按照升序排序,可以任意交换两个数的位置,请输出最少需要交换的次数。
    找规律并用编程实现如下数列(数值超过10000停止打印) 1,1,2,2,3,2,5,4,8,8
  • 原文地址:https://www.cnblogs.com/litifeng/p/9259813.html
Copyright © 2011-2022 走看看