四维加密算法
2023-08-17 20:26:03
发布于:浙江
加密算法:
#include <bits/stdc++.h>
using namespace std;
string encrypt(const string &input, const vector<int> &key) {
string encrypted = input;
int keySize = key.size();
int inputSize = input.size();
for (int i = 0; i < inputSize; ++i)
encrypted[i] = char(int(input[i] + key[i % keySize]) % 256);
return encrypted;
}
int main() {
int a[4] = {};
cout << "密钥:";
scanf("%1d%1d%1d%1d" ,&a[0] ,&a[1] ,&a[2] ,&a[3]);
vector<int> encryptionKey = {a[0] ,a[1] ,a[2] ,a[3]};
ifstream inputFile("input.txt");
ofstream outputFile("encrypted_output.txt");
if (!inputFile.is_open() || !outputFile.is_open()) {
cerr << "文件打开错误!" << endl;
return 1;
}
string inputContent((istreambuf_iterator<char>(inputFile)),(istreambuf_iterator<char>()));
string encryptedContent = encrypt(inputContent, encryptionKey);
outputFile << encryptedContent;
inputFile.close();
outputFile.close();
cout << "加密成功!" << endl;
return 0;
}
解密算法:
#include <bits/stdc++.h>
using namespace std;
string decrypt(const string &input, const vector<int> &key) {
string decrypted = input;
int keySize = key.size();
int inputSize = input.size();
for (int i = 0; i < inputSize; ++i)
decrypted[i] = char(int(input[i] - key[i % keySize] + 256) % 256);
return decrypted;
}
int main() {
int a[4] = {};
cout << "密钥:";
scanf("%1d%1d%1d%1d" ,&a[0] ,&a[1] ,&a[2] ,&a[3]);
vector<int> decryptionKey = {a[0] ,a[1] ,a[2] ,a[3]};
ifstream encryptedFile("encrypted_output.txt");
ofstream decryptedFile("decrypted_output.txt");
if (!encryptedFile.is_open() || !decryptedFile.is_open()) {
cerr << "文件打开错误!" << endl;
return 1;
}
string encryptedContent((istreambuf_iterator<char>(encryptedFile)),(istreambuf_iterator<char>()));
string decryptedContent = decrypt(encryptedContent, decryptionKey);
decryptedFile << decryptedContent;
encryptedFile.close();
decryptedFile.close();
cout << "解密成功!" << endl;
return 0;
}
使用说明:
-
将需要加密的txt文件名改为
input.txt
,运行程序,密钥为4位,加密完成后会在生成另一个txt文件encrypted_output.txt
为加密后的文件。 -
将需要解密的txt文件名改为
encrypted_output.txt
,运行程序,密钥为4位(务必与加密的密钥相同!),加密完成后会在生成另一个txt文件decrypted_output.txt
为解密后的文件。 -
密钥可以包含:数字,字母,英文字符(如:
1as2
、3m!1
、432@
等等)
全部评论 1
其实这个程序可以再一次升级,利用类似于http的“3次握手”,大幅提升安全性
2023-08-18 来自 浙江
0
有帮助,赞一个