c++ - 密码学。获得最差的加密结果
问题描述
在下面的代码中, foo () 形成了键(取生成序列的最左边的元素)。然后使用此密钥使用 ^ 加密消息。也就是说,单词中的每个字符都必须是带有键的 ^。为此,我使用 ENCODE 功能。仅输出带有键和第一个字符的结果 ^(计算正确)。由于某种原因,其余部分没有接触。
#include <iostream>
#include <bitset>
#include <string>
#include <vector>
#include <iomanip>
std::vector<char> foo(std::vector<char>& key2) {
uint32_t state = 0b1111111111111111111111111111111;
uint32_t start_state2{ state };
uint32_t period {0};
uint32_t bit2 {0};
do {
bit2 = ((state >> 31) ^ (state >> 30) ^ (state >> 29) ^ (state >> 25) ^ state);
//bit2 = key2[period];
(key2[period]) = (bit2);
std::cout << std::bitset<8>(key2[period]) << " ";
state = (state >> 1) | (bit2 << 31);
std::cout << std::bitset<32>(state) << std::endl;
period++;
} while ((period != 15) && (start_state2 != state));
std::cout << "Period: " << period << std::endl;
return key2;
}
const int SIZE{8};
void ENCODE(std::string data, std::vector<char>& key2) {
std::vector<std::bitset<SIZE>> vec_bitset_data;
for(unsigned i=0; i < data.size(); ++i) {
std::bitset<SIZE> d(data[i]);
std::bitset<SIZE> k(key2[i]);
std::bitset<SIZE> encoded = d^k;
std::cout << encoded << ' ';
}
std::cout << " ";
}
int main() {
std::vector<char> key2(32);
foo(key2);
std::string data;
data = "Hello";
std::cout << "\nData string: " << data << '\n';
for(unsigned i = 0; i < data.size(); i++) {
std::bitset<8> d(data[i]);
std::cout << d << ' ';
}
std::cout << '\n';
std::cout << "Key: ";
for(unsigned i=0; i < data.size(); ++i) {
std::cout << std::bitset<8>(key2[i]) << " ";
}
std::cout << '\n';
ENCODE(data, key2);
return 0;
}
输出
Data string: Hello
01001000 01100101 01101100 01101100 01101111
Key: 11000010 11100001 10110111 10011100 11001110
10001010 10000100 11011011 11110000 10100001
解决方案
推荐阅读
- python - 如何使用python解压缩多个文件
- python - Asyncio/Websocket:客户端不向服务器发送消息
- pandas - 有没有办法重新调整数据框以显示更好的时间序列数据集?
- php - 无法将时间戳存储到 MariaDB
- scala - Dataframe foreach 循环 - 提取结果的更好方法?
- reactjs - apache超集仪表板上的浮动组件/图表
- reactjs - 在基于 React 的 chrome 扩展中无法访问 Chrome 存储 API
- linux - 终端命令 ls > wc 和 ls | 有什么作用?厕所秀?
- sql - sql 在具有多个命名表的子查询中选择 max()
- azure - 如何将两个数组传递给 Azure 数据工厂中的 ForEach 活动?