Почему бы просто не дополнить существующие 4 байта еще четырьмя байтами нулей? Или повторить оригинальные 4 байта. Например:
static byte[] Pad(byte[] input)
{
// Alternatively use Array.Resize
byte[] output = new byte[input.Length + 4];
Buffer.BlockCopy(input, 0, output, 0, input.Length);
return output;
}
static byte[] Repeat(byte[] input)
{
byte[] output = new byte[input.Length * 2];
Buffer.BlockCopy(input, 0, output, 0, input.Length);
Buffer.BlockCopy(input, 0, output, input.Length, input.Length);
return output;
}
Оба они соответствуют вашим первоначальным критериям, я полагаю ... но я подозреваю, что вы ищете что-то еще. Если это так, вам нужно четко указать, что вам нужно.
РЕДАКТИРОВАТЬ: Как я уже сказал в комментариях, вы здесь не добавляете никакой реальной безопасности - заполнение сделает это более ясным, IMO. С другой стороны, если вы действительно хотите получить некоторую защиту сквозь скрытность, вы можете найти генератор случайных чисел, который разрешит засев, и использовать его как отправную точку. Например:
// Don't use this - see below. Just the concept...
int seed = BitConverter.ToInt32(input, 0); // TODO: Cope with endianness
Random rng = new Random(seed);
byte[] output = new byte[8];
Buffer.BlockCopy(input, 0, output, 0, 4);
for (int i = 4; i < 8; i++) {
output[i] = (byte) rng.Next(256);
}
Теперь, причина, по которой я получил комментарий выше, заключается в том, что вам, вероятно, нужен алгоритм, который гарантированно не будет меняться между версиями .NET. Найдите код для чего-то вроде Mersenne Twister, например.