C# Реализация расчета MAC для розничной торговли (алгоритм MAC ISOIEC 9797-1 3)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# Реализация расчета MAC для розничной торговли (алгоритм MAC ISOIEC 9797-1 3)

Сообщение Anonymous »

Я пытаюсь вычислить MAC, используя

Криптографические контрольные суммы вычисляются с использованием MAC-алгоритма ISOIEC 9797-1
3 с блочным шифром DES, нулевой IV (8 байт) и 1S09797-1
метод заполнения 2. Длина MAC ДОЛЖНА составлять 8 байт

из технического отчета PM для Машиносчитываемые проездные документы с доступом ICC только для чтения. Версия: 1.1. Дата: 1 октября 2004 г.
Я использую примеры значений из отчета:
< блок-цитата>
Кенц: AB 94 FD EC F2 67 4F DF B9 B3 91 F8 5D 7F 76 F2
Kmac: 79 62 D9 EC E0 3D 1A CD 4C 76 08 9D CE 13 15 43
eIFD: 72 C2 9C 23 71 CC 9B DB 65 B7 79 B8 E8 D3 7B 29 EC C1 54 AA 56 A8
79 9F AE 2F 49 8F 76 ED 92 F2

Однако я не получаю тот же MAC и не знаю, как мне это сделать. Моя первая попытка была:

Код: Выделить всё

                MACTripleDES mac = new System.Security.Cryptography.MACTripleDES(Kmac);
mac.Initialize();
mac.Padding = PaddingMode.None;
mac.Key = Kmac;
mIfd = mac.TransformFinalBlock(eIfd, 0, eIfd.Length);
Результат:

mIFD:1C DE 09 70 4C 0D 9B 12
< /blockquote>
Ожидается:

mIFD:5F 14 48 EE A8 AD 90 A7

Затем я попытался вручную выполнить каждый шаг, как я понимаю «ISO/IEC 9797-1 MAC-алгоритм 3 с блочным шифром DES, нулевым IV (8 байтов) и методом заполнения 1S09797-1 2» со следующим: (Я основал это на ответе Расмуса Фабера, но разбил данные на 64-битные блоки для шагов итерации)

Код: Выделить всё

                byte[] key1 = new byte[8];
Array.Copy(kMAC, 0, key1, 0, 8);
byte[] key2 = new byte[8];
Array.Copy(kMAC, 8, key2, 0, 8);
Console.WriteLine("key1:{0}", Hex.BytesToSpacedHexString(key1));
Console.WriteLine("key2:{0}", Hex.BytesToSpacedHexString(key2));

// Plit the blocks
byte[] d1 = new byte[8];
byte[] d2 = new byte[8];
byte[] d3 = new byte[8];
byte[] d4 = new byte[8];
Array.Copy(eIfd, 0, d1, 0, 8);
Array.Copy(eIfd, 8, d2, 0, 8);
Array.Copy(eIfd, 16, d3, 0, 8);
Array.Copy(eIfd, 24, d4, 0, 8);

DES des1 = DES.Create();
des1.BlockSize = 64;
des1.Key = key1;
des1.Mode = CipherMode.CBC;
des1.Padding = PaddingMode.None;
des1.IV = new byte[8];

DES des2 = DES.Create();
des2.BlockSize = 64;
des2.Key = key2;
des2.Mode = CipherMode.CBC;
des2.Padding = PaddingMode.None;
des2.IV = new byte[8];

// MAC Algorithm 3
// Initial Transformation 1
byte[] h1 = des1.CreateEncryptor().TransformFinalBlock(d1, 0, 8);
// Iteration on the rest of blocks
// XOR
byte[] int2 = new byte[8];
for (int i = 0; i < 8; i++)
int2[i] = (byte)(h1[i] ^ d2[i]);
// Encrypt
byte[] h2 = des1.CreateEncryptor().TransformFinalBlock(int2, 0, 8);
// XOR
byte[] int3 = new byte[8];
for (int i = 0; i < 8; i++)
int3[i] = (byte)(h2[i] ^ d3[i]);
// Encrypt
byte[] h3 = des1.CreateEncryptor().TransformFinalBlock(int3, 0, 8);
// XOR
byte[] int4 = new byte[8];
for (int i = 0; i < 8; i++)
int4[i] = (byte)(h3[i] ^ d4[i]);
// Encrypt
byte[] h4 = des1.CreateEncryptor().TransformFinalBlock(int4, 0, 8);

// Output Transformation 3
byte[] h4decrypt = des2.CreateDecryptor().TransformFinalBlock(h4, 0, 8);
mIfd = des1.CreateEncryptor().TransformFinalBlock(h4decrypt, 0, 8);
Console.WriteLine("mIFD:{0}", Hex.BytesToSpacedHexString(mIfd));
Выходные данные:

eIFD:72 C2 9C 23 71 CC 9B DB 65 B7 79 B8 E8 D3 7B 29 EC C1 54 AA 56 A8
79 9F AE 2F 49 8F 76 ED 92 F2
key1:79 62 D9 EC E0 3D 1A CD
key2:4C 76 08 9D CE 13 15 43

Результат:

mIFD:AA E3 F3 51 32 ED 34 65

Ожидается:

mIFD:5F 14 48 EE A8 AD 90 A7

В обоих случаях все было по-разному, как и ожидалось. Что мне не хватает?
Спасибо, что уделили время.

Подробнее здесь: https://stackoverflow.com/questions/203 ... lgorithm-3
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# Реализация расчета MAC для розничной торговли (алгоритм MAC ISOIEC 9797-1 3)
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Polars: расширенный алгоритм перекрестной торговли
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Еженедельная оплата ссуды/ расчета расчета займа в C#
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Что представляет собой статья «Оливер [1993]», описывающая алгоритм PHP для расчета сходства текста?
    Anonymous » » в форуме Php
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Онлайн-алгоритм расчета стандартного отклонения отсчетов
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»