当前位置:首页 > 软件使用 > 正文

二进制加密解密操作

输入一个6位数的整数, 表示密码, 对其进行加密;

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
string pwd; 
int SUM, s = 1, t, INDEX, bin[33]; 
int main(){
	cin >> pwd;
	reverse(pwd.begin(), pwd.end());
	for(int i = 0; i < pwd.size(); i++){
		t = pwd[i] - '0';
		while(t != 0) bin[INDEX++] = t % 2, t /= 2;
		if(INDEX < 4 * (i + 1)) INDEX = 4 * (i + 1);
	}
	for(int i = 0; i < 32; i++) SUM += bin[i] * s, s *= 2;
	cout << SUM;
	return 0;
}

采用位运算实现加密:

#include <iostream>
#include <cstdio>
using namespace std;
string pwd; 
int t, SUM;
int main(){
	cin >> pwd;	
	for(int i = 0; i < pwd.size(); i++) SUM |= ((pwd[i] - '0') << 4 * (5 - i));
	cout << SUM;
	return 0;
}


输入一个加密整数加密后的数字, 对其进行解密;

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int n, INDEX, bin[33], t, s = 1;
string pwd;
int main(){
	cin >> n;
	while(n != 0) bin[INDEX++] = n % 2, n /= 2;
	for(int i = 0; i < 25; i++){
		if(i % 4 == 0 && i != 0) pwd += t + '0', t = 0, s = 1;
		t += bin[i] * s, s *= 2;
	}
	reverse(pwd.begin(), pwd.end());
	cout << pwd;
	return 0;
}

采用位运算实现解密

#include <iostream>
#include <cstdio>
using namespace std;
int n, t = 0b00000000111100000000000000000000;
int main(){
	cin >> n;
	for(int i = 0; i < 6; i++){
		cout << ((t & n) >> ((5 - i) * 4)); 
		t >>= 4;
	}
	return 0;
}


有话要说...