1

4バイトのデータがあり、セキュリティ操作のために8バイトの配列が必要です。これらの8バイトを4バイトのバイト配列から生成する必要があります。これは再現可能である必要があります。

正確なバイト配列を使用し、4バイトを追加して、既知のシーケンスの初期配列のAND、OR、XOR...で埋めることを考えていました。それが良い考えかどうかはわかりません。この4バイトから8バイトの配列が必要であり、操作は再現可能である必要があります(同じ8バイトと同じ4バイトが与えられます)。C#で例を挙げてください

4

4 に答える 4

4

既存の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のバージョン間で変更されないことが保証されているアルゴリズムが必要だからです。たとえば、メルセンヌツイスターのようなコードを見つけてください。

于 2010-11-19T08:31:33.417 に答える
1

ブロック暗号のパディングを行う方法は複数あります。

このウィキペディアの記事は、より受け入れられている解決策のいくつかをカバーしています:http: //en.wikipedia.org/wiki/Padding_ (cryptography)#Padding_methods

他の考慮事項を除いて、私はPKCS#7パディングを使用します。

于 2010-11-19T08:36:32.810 に答える
1

どうですか

bytes.Concat(bytes)
于 2010-11-19T08:38:41.293 に答える
1

とても気をつけます。セキュリティ操作に64ビット相当のデータが必要な場合、それはおそらくそれだけの量のデータが必要なためです。既知の再現可能な式を使用して32ビットから64ビットを作成した場合でも、32ビット相当のデータしかありません。

セキュリティが所有しているデータの影響を受けない場合は、残りの4バイトを1または0で埋めることができます。ただし、実際には8バイトの「実際の」データを取得するようにしてください。

于 2010-11-19T08:39:46.777 に答える