34 lines
641 B
C
34 lines
641 B
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <vector>
|
|||
|
|
#include <cstdint>
|
|||
|
|
#include <string>
|
|||
|
|
|
|||
|
|
// Encode for IP and Port.
|
|||
|
|
// provided by ChatGPT.
|
|||
|
|
class StreamCipher {
|
|||
|
|
private:
|
|||
|
|
uint32_t state;
|
|||
|
|
|
|||
|
|
// <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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
StreamCipher(uint32_t key) : state(key) {}
|
|||
|
|
|
|||
|
|
// <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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|