如何通过可重现的操作从4个字节产生8个字节?

我有4个字节的数据,需要一个8字节的数组来进行安全操作。我应该从4字节字节数组生成这8个字节,这应该是可重现的。 我正在考虑使用精确的字节数组并添加4个额外的字节,并用已知序列中的初始数组的AND,OR,XOR ...填充它们。我不确定这是不是一个好主意。我只需要这个4字节的8字节数组,操作应该是可重复的(相同的8字节,相同的给定4字节)。请举一个C#的例子     
已邀请:
为什么不用另外4个字节的零填充现有的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的代码,例如。     
有多种方法可以为分组密码进行填充。 这篇维基百科文章涵盖了一些更受欢迎的解决方案:http://en.wikipedia.org/wiki/Padding_ (cryptography)#Padding_methods 除非考虑任何其他因素,否则我会使用PKCS#7填充。     
怎么样
bytes.Concat(bytes)
    
我会非常小心的。如果安全操作需要64位数据,则​​可能是因为它需要大量数据。如果使用已知的可重现公式从32位创建64位,则仍将只有32位数据。 如果安全性不受您拥有的数据的影响,您可以使用1或0填充剩余的4个字节。但你应该尝试获得8个字节的“真实”数据。     

要回复问题请先登录注册