简单的加密/解密算法_/c++

        关于加密和解密问题,有的加密算法是不存在解密算法的(原因就是加密算法的不可逆性,即无法通过算法将密文还原),有的加密存在解密算法(原因是其加密过程是可逆的,即可以通过逆向算法将密文还原)。然而单独的一种加密算法不一定可靠,这时可以将多种加密算法组合使用。至于相关的加密算法各位自己去了解。

        下面介绍一个简单的加密/解密算法实例,希望对此加密解密算法有一定认识: 

        首先介绍加密算法: 主要加密计算为 '^' 原因是 '^'运算是可逆的,如二进制数 1^0 = 1, 1^1 = 0; 0^1 = 1, 0^0 = 0;

  所以 1 = 1^0^0,即是加密部分为 [1^0] = r, 解密部分为[r^0], 所以解密算法就是将密文与加密数据0在进行一次'^'运算,以此类推就可以实现多位二进制的加密解密。在计算执行的指令都是二进制数,这里就需要理解为什么十进制和ASCII码同样可以使用'^'运算进行加密解密.`

        c++源代码: 

                example_1:

#include <iostream>

#define KEY 1313113

using namespace std;


//加密算法
int encrypt(int src_pass, int key){
    return src_pass^key;
}

//解密算法
int decrypt(int des_pass, int key){
    return des_pass^key;
}

int main(){
    int src_pass = 2000;
    cout<<src_pass<<endl;
    int des_pass = encrypt(src_pass, KEY);
    cout<<des_pass<<endl;
    int result = decrypt(des_pass, KEY);
    cout<<result<<endl;
    return 0;
}

         example2:

  

#include <iostream>
#include <windows.h>
#define L 6

using namespace std;

//原始数据
int mess[L] = {-23, -28, -19, -19, -18, -10};

//对原始数据进行加密
//加密算法
void encrypt(char *arr, int len){
    for(int i = 0; i < len; i++){
       arr[i] |= -0x80;	//希望读者了解ascii^-0x80,这里等价于 ascii^0x80
       arr[i] ^= 0x1;
    }
}

//解密算法
void decrypt(char *arr, int len){
    for(int i = 0; i < len; i++){
        arr[i] ^= 0x1;	
        arr[i] ^= 0x80;	//对ascii最高位进行了加密'^'运算,当然也要进行解密'^'运算
    }
}

bool judge(char* arr, int index){
    if(index < 0){
        return true;
    }else{
        if((int)arr[index] == mess[index]){
            judge(arr, index-1);
        }else{
            return false;
        }
    }
    return true;
}

//测试用
void print_(char *arr, int len){
    for(int i = 0; i < len; i++){
        cout<<(int)arr[i]<<", ";
    }
    cout<<endl;
}

//测试用
string print(char *arr, int len){
    string tmp = "";
    for(int i = 0; i < len; i++){
        tmp += arr[i];
    }
    return tmp;
}

//测试时的源代码
int main()
{
    char *arr = new char[L];
    cout<<"please input the password: ";
    for(int i = 0; i < L; i++){
        cin>>arr[i];
    }
    string tmp = "";
    tmp = print(arr, L);
    cout<<tmp<<endl;
    encrypt(arr, L);
    print_(arr, L);
    tmp = print(arr, L);
    cout<<tmp<<endl;
    decrypt(arr, L);

    tmp = print(arr, L);
    cout<<tmp<<endl;
    if(judge(arr, L-1)){
        cout<<"you is the user, hello!!"<<endl;
    }else{
        cout<<"you are not the user!!!"<<endl;
    }
    system("pause");
    return 0;
}
        希望两个小例子,各位能够有所收获。

    

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值