暗号化アルゴリズムに関する情報を使用して、C# で MAC-CBC 生成メソッドを実装する必要があります。ここに私が持っているものがあります:
- DES を使用する必要があります。
- 鍵は
byte[] {11, 11, 11, 11, 11, 11, 11, 11}
- データ (16 バイト) は、8 バイトの部分で暗号化する必要があります。
Instance Vector = new byte[8]
最初の 8 バイトは(値が 0 の 8 バイト) を使用して暗号化されます。(CBC?) - 暗号化された値の最後の 8 バイトを 16 進文字列に変換する必要があります。これは私が送信する必要がある結果です。
この情報を使用して、次の方法を実装しました。
public static string Encrypt(byte[] data)
{
var IV = new byte[8];
var key = new byte[] { 11, 11, 11, 11, 11, 11, 11, 11 };
var result = new byte[16];
// Create DES and encrypt.
var des = DES.Create();
des.Key = key;
des.IV = IV;
des.Padding = PaddingMode.None;
des.Mode = CipherMode.CBC;
ICryptoTransform cryptoTransform = des.CreateEncryptor(key, IV);
cryptoTransform.TransformBlock(data, 0, 16, result, 0);
// Get the last eight bytes of the encrypted data.
var lastEightBytes = new byte[8];
Array.Copy(result, 8, lastEightBytes, 0, 8);
// Convert to hex.
var hexResult = string.Empty;
foreach (byte ascii in lastEightBytes)
{
int n = (int)ascii;
hexResult += n.ToString("X").PadLeft(2, '0');
}
return hexResult;
}
彼らが私に提供したサンプルの生データは次のとおりです。input=byte[] {0, 6, 4, 1, 6, 4, 1, 7, E, E, F, F, F, F, B, B)
これは value: の出力を返すはずですA7CBFB3C730B059C
。これは、暗号化されたデータの最後の 8 バイトが次のようになることを意味しますbyte[] {167, 203, 251, 60, 115, 11, 05, 156}
。
残念ながら、上記の方法を使用すると、次のようになります32D91200D0007632
。つまり、暗号化されたデータが正しくありません。(私のメソッドが生成した暗号化された値の最後の 8 バイトは ですbyte[] {50, 207, 18, 0, 208, 0, 118, 50}
)。
A7CB に到達するために何をすべきかを知る方法はありますか? 私は何か間違ったことをしていますか?