c# - 如何通过可重现的操作从 4 个字节生成 8 个字节?

标签 c# security bitwise-operators binary-reproducibility

我有 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 之类的代码。

关于c# - 如何通过可重现的操作从 4 个字节生成 8 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223228/

相关文章:

c - 身份属性的位操作

PHP奇怪的按位运算符对字符串的影响

c# - 如何在 XmlTextWriter 中使用 CR 而不是 CRLF 生成 XML

c# - 母版页 - 只能将 ScriptManager 的一个实例添加到页面

c# - 如何使用按钮 c# 在列表框中显示重复项

c# - 如何保护帖子表单中的数据?

javascript - Firebase 电子邮件身份验证示例安全吗?

c# - 异常 : Specified cast is not valid

java - 授予权限 java.lang.RuntimePermission 修改线程

c - 如何判断三个数是否相等