2025-05-27 04:15:35 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
|
|
// Encode for IP and Port.
|
|
|
|
|
|
// provided by ChatGPT.
|
2025-10-15 04:32:59 +08:00
|
|
|
|
class StreamCipher
|
|
|
|
|
|
{
|
2025-05-27 04:15:35 +08:00
|
|
|
|
private:
|
2025-10-15 04:32:59 +08:00
|
|
|
|
uint32_t state;
|
2025-05-27 04:15:35 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><EFBFBD><F2B5A5B7><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint8_t prngNext()
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ӣ<EFBFBD>xorshift32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
state ^= (state << 13);
|
|
|
|
|
|
state ^= (state >> 17);
|
|
|
|
|
|
state ^= (state << 5);
|
|
|
|
|
|
// <20>ٻ<EFBFBD><D9BB><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ķ<F2B5A5B5><C4B7><EFBFBD><EFBFBD>Ա任
|
|
|
|
|
|
uint8_t out = (state & 0xFF) ^ ((state >> 8) & 0xFF);
|
|
|
|
|
|
return out;
|
|
|
|
|
|
}
|
2025-05-27 04:15:35 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
2025-10-15 04:32:59 +08:00
|
|
|
|
StreamCipher(uint32_t key) : state(key) {}
|
2025-05-27 04:15:35 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><><EFBFBD>ܽ<EFBFBD><DCBD>ܣ<EFBFBD><DCA3>Գƣ<D4B3><C6A3><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2>䣩
|
|
|
|
|
|
void process(uint8_t* data, size_t len)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (size_t i = 0; i < len; ++i) {
|
|
|
|
|
|
data[i] ^= prngNext();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-05-27 04:15:35 +08:00
|
|
|
|
};
|
2025-06-19 17:50:11 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
class PrintableXORCipher
|
|
|
|
|
|
{
|
2025-06-19 17:50:11 +08:00
|
|
|
|
public:
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20>ԳƼӽ<C6BC><D3BD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɴ<EFBFBD>ӡ<EFBFBD>ַ<EFBFBD>
|
|
|
|
|
|
// ǰ<><EFBFBD><E1A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32~126<32><36>Χ<EFBFBD><CEA7><EFBFBD>ַ<EFBFBD>
|
|
|
|
|
|
void process(char* data, size_t len)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (size_t i = 0; i < len; ++i) {
|
|
|
|
|
|
char c = data[i];
|
|
|
|
|
|
// <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ǿɴ<C7BF>ӡ<EFBFBD><D3A1>Χ
|
|
|
|
|
|
if (c < 32 || c > 126) {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>0x55<35><35>'U'<27><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32~126֮<36><D6AE>
|
|
|
|
|
|
char encrypted = c ^ 0x55;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><DAA3>Ӽ<F2B5A5BC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (encrypted < 32) encrypted += 95;
|
|
|
|
|
|
if (encrypted > 126) encrypted -= 95;
|
|
|
|
|
|
data[i] = encrypted;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-19 17:50:11 +08:00
|
|
|
|
};
|