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;
    
    }
  • 相关阅读:
    D365: 笔记(VS无法打开表浏览器)
    D365: 笔记(跟踪调试批处理代码)
    D365: 笔记(非批处理执行class中弹出交互式窗体或报表)
    D365: 笔记(现有量增加批号表字段查询条件)
    D365: 新功能(二)采购发票自动化流程
    D365: 新功能(一)按日期设置编号规则
    ES6 入门教程(未完)
    深入理解TypeScript(未完)
    项目
    vue + threejs 项目踩坑总结
  • 原文地址:https://www.cnblogs.com/litifeng/p/9259813.html
Copyright © 2011-2022 走看看