Ключевые компоненты 3DES

Мне нужно зашифровать/расшифровать данные с помощью 3DES. Ключи, которыми мне поделились, находятся в форме;

Компонент 1 = 111111111111111111111111111111111

Компонент 2 = 22222222222222222222222222222222

KVC = ABCD1234

Мне нужно создать ключ 3DES из вышеуказанных компонентов или подключей K1,k2,k3,

Я понимаю, что подключи имеют длину 16 байтов, однако они имеют длину 32 байта.

Пожалуйста, поделитесь процедурой создания ключа 3DES.


person kasai    schedule 13.01.2015    source источник
comment
На самом деле недостаточно информации, чтобы понять данные, которые вы представляете.   -  person President James K. Polk    schedule 13.01.2015
comment
просто нужен процесс/алгоритм, который используется для перевода компонентов в KEY. онлайн-генератор ключей по адресу emvlab.org/keyshares не соответствует моему значению KCV   -  person kasai    schedule 13.01.2015


Ответы (4)


Преобразуйте четкие компоненты в байтовые массивы, используя стандартный метод HexStringToByte. Передайте 3-байтовые массивы методу ниже. Вы можете проверить свои результаты на странице http://www.emvlab.org/keyshares/. Вот примеры данных:

  • копия1: 447FC2AA6EFFFEE5405A559E88DC958C
  • копия2: 1086F0493DB0EFE42EDF1BC99541E96F
  • копия3: D1C603D64D1EDC9D3CA78CD95D168E40
  • ключ результата: 853F31351E51CD9C5222C28E408BF2A3
  • ключ результата kvc: 1E49C1
public static byte[] buildKey(byte[] cc1, byte[] cc2, byte[] cc3) {
  byte[] result = new byte[cc1.length];
  int i = 0;
  for (byte b1: cc1) {
    byte b2 = cc2[i];
    byte b3 = cc3[i];
    result[i] = (byte)(b1 ^ b2 ^ b3);
    i++;
  }
  return result;
}
person Slav    schedule 23.05.2015
comment
Это не имеет смысла, cc1, cc2 и cc3 в шестнадцатеричном формате имеют по 16 байт каждый. полный ключ 3DES составляет 24 байта - person zaph; 15.08.2017
comment
Как расшифровать так? - person CEng; 13.07.2020

  1. Преобразуйте шестнадцатеричные строки в байтовые массивы. 32 символа дадут вам 16 байт
  2. 3des требует 3 8-байтовых ключа, поэтому ему нужно 24 байта. Однако первый и третий ключи могут быть одинаковыми. Поэтому вам нужно расширить свой массив до 24 байт, скопировав первые 8 байтов в конец. Этот 24-байтовый массив является результирующим ключом, который вы можете использовать для шифрования и дешифрования.
  3. Нет, чтобы проверить ваш ключ — зашифруйте строку «00000000000000000» (8 нулевых байтов или 16 нулевых шестнадцатеричных символов) с помощью вашего ключа. Начало закодированного результата должно быть равно вашему KCV.
person Jedi-Philosopher    schedule 13.05.2015

У меня была такая же проблема. Продолжая приведенный выше пример, у вас есть два ключевых компонента:

Компонент 1 = 111111111111111111111111111111111

Компонент 2 = 22222222222222222222222222222222

Вам нужно добавить третий компонент, так как его у вас нет, это будут нули

Компонент 3 = 000000000000000000000000000000000

Теперь используйте метод, предоставленный @Slav, это даст вам настоящий мастер-ключ.

byte[] masterKey = buildKey (component1, component2, component3) ; remember those values has to be in hexa. 

Теперь предположим, что у вас есть зашифрованное значение, которое вы расшифруете следующим образом:

byte[] plainValue = tripleDESDecrypt (encryptedValue, masterKey); 

Если вам нужна более подробная информация, пожалуйста, свяжитесь со мной, чтобы отправить файлы Java.

person Carlos Emilio Mejia    schedule 14.08.2017
comment
Как правило, в 2TDEA, двухключевом 3DES первые и последние 8 байтов совпадают. - person zaph; 15.08.2017
comment
Да, вы правы, но это для ключа. Здесь у нас есть компоненты, которые делают XOR, у нас будет ключ. Если результирующий ключ имеет длину 16 байт, мы добавим первые 8 байтов для добавления к ключу. Обычно это делается автоматически в реализации TripleDes в .net. - person Carlos Emilio Mejia; 18.08.2017
comment
Как правило, это делается автоматически в реализации TripleDes в .net да, обычно, но не всегда в разных реализациях. Это было бы отличным дополнением к ответу. Действительно лучше предоставить полный 24-байтовый ключ, в нем нет двусмысленности и он не зависит от реализации. WRT вопрос: неясно, какие значения, большие целые числа, символы ASCII, двоичный код в шестнадцатеричном кодировании. Вы сделали в целом правильный выбор, что они шестнадцатеричные, это кажется правильным. - person zaph; 18.08.2017

Просто используйте калькулятор EFT, который можно скачать по следующей ссылке: https://eftcalculator.codeplex.com/ Просто XOR всех компонентов, которые у вас есть, и вы получите свой ключ 3DES. Чтобы проверить результат, просто зашифруйте «0000000000000000», используя тот же калькулятор с полученным ключом XOR. В результате вы получите контрольное значение ключа (KCV).

У вас есть ключ 3DES длиной 32 байта в строковом представлении HEX. Сжатие этой строки до байтов даст вам 16 байтов (1 байт == 2 шестнадцатеричных символа строки).

person Juris Lacis    schedule 14.01.2015
comment
Примечание. Ключ 3DES имеет размер 24 байта. Существует онлайн-калькулятор 3DES. - person zaph; 15.08.2017