long mylong = (((long)mybyte) << 40) | myint;
Чтобы получить исходное значение:
int myorigint = (int)(mylong & ~(((long)mybyte) << 40));
Но для этого требуется 8-байтовый тип long.Которые не требуются стандартом C.Если длинный 4 байта, вам не повезло.Это означает, что long
и int
будут иметь одинаковую длину.Если sizeof(int)==sizeof(long)==4
, то запрос на сохранение значения типа int и байта в long означает запрос на сохранение 5 произвольных байтов информации в 4 байта.Что совершенно невозможно.
Конечно, есть и тривиальное «решение»:
long mylong = (long)myint;
, и наоборот:
int myint = (int)mylong;
Теперь кто-то знает (или не зная!) байт может извлечь исходные данные.
Если вам нужно решение, такое, что только кто-то, кто знает правильный байт, может извлечь исходный int, вы можете использовать это:1020 *
long mylong = (long)(myint-mybyte);
и наоборот:
int myint = (int)(mylong+mybyte);
Но знайте, что шифрование четырех байтов одним байтом не будет действительно безопасным.Вы должны использовать 4-байтовую одноразовую панель для шифрования четырех байтов.Если у вас есть четырехбайтовый ключ, используйте XOR для действительно неразрушимого шифра.Нет, правда.