此方法利用按位异或的算法,按位异或就是指同位得1,异位得0;
例如:2和1异或
2的二进制是10
1的二进制是01
2^1的结果是00
我们将2^1的结果00再次和1异或
2^1的结果是00
1的二进制是01
异或结果是10(也就是2)
相信大家已经明白了我的意思了。
先看一个固定的key(31)的算法
//加密解密程序
voidencrypt(char*message)
{
    while(*message) {
        //对message的每一个字符和31进行按位异或
        *message = *message ^ 31;
        message++;
    }
}
 
intmain()
{
    chars[] = "Hello qizexi";
     
    //运行一次:进行加密
    encrypt(s);
    printf("加密:%s\n", s);
    //再运行一次是解密
    encrypt(s);
    printf("解密:%s\n", s);
     
    return0;
}


下面是我们程序中经常看到的模样:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
 
//加密解密程序
voidencrypt(char*message, constchar *key)
{
    inti;
    intlen = strlen(key);
    while(*message) {
        //对message的每一个字符和key进行按位异或
        for(i = 0; i < len; i++) {
            *message = *message ^ (int)key[i];
        }
        message++;
    }
}
 
intmain()
{
    //密文
    chars[] = "Hello qizexi";
    //密匙
    char*key = "qizexi@163.com";
     
    //运行一次:进行加密
    encrypt(s, key);
    printf("加密:%s\n", s);
    //再运行:进行解密
    encrypt(s, key);
    printf("解密:%s\n", s);
     
    return0;
}


GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐