Преобразование 96-битного ключа DES в 64-битный

Как я могу преобразовать 96-битный ключ в 64-битный ключ? У меня есть ключ DES длиной 96 бит (т.е. 745347651281) . Я хочу преобразовать его в 64-битный, который я буду использовать для расшифровки зашифрованного текста DES.

Обновление:

  1. Был «исходный ключ», зашифрованный RSA
  2. «Исходный ключ» был расшифрован с использованием RSA, чтобы дать нам это (например, 745347651281)
  3. Это (т.е. 745347651281) теперь предполагается использовать для расшифровки файла DES.

Примечание. «Исходный ключ» был в шестнадцатеричном формате, который я преобразовал в целое число (база 16) перед расшифровкой RSA.


person basifat    schedule 28.02.2015    source источник
comment
Возможно, это кодировка Base64. В противном случае вы не сможете расшифровать исходное сообщение. Почитайте про кодировку Base64.   -  person i486    schedule 28.02.2015
comment
@ i486 12 не является допустимым символом base 64, если его рассматривать как ASCII.   -  person Maarten Bodewes    schedule 28.02.2015
comment
Для DES не существует такого понятия, как 96-битный ключ. Вы уверены, что это не 56-битный размер? Для какого языка/среды выполнения вам это нужно? Помните, что это StackOverflow: только вопросы, связанные с программированием! И, конечно же, добро пожаловать в StackOverflow!   -  person Maarten Bodewes    schedule 28.02.2015
comment
@MaartenBodewes Я использую это в python, и для расшифровки мне нужен 8-байтовый или 64-битный ключ. Большое спасибо!   -  person basifat    schedule 01.03.2015
comment
@CodesInChaos, я виноват в неправильном вычислении (96 бит). Разве эти 12 цифр не должны были быть 48 битами?   -  person basifat    schedule 01.03.2015
comment
@basifat Если вы используете равномерно распределенные шестнадцатеричные цифры, вы получите 48 бит, если вы ограничите их десятичными цифрами, это всего 40 бит.   -  person CodesInChaos    schedule 01.03.2015
comment
@basifat Возможно, ваша библиотека выполняет какое-то расширение ключа внутри, пожалуйста, включите код и криптографическую библиотеку, используемые в вопросе.   -  person Maarten Bodewes    schedule 01.03.2015


Ответы (1)


Ключ, который вы отобразили, имеет размер 48 бит, а не 96 бит - если он считается указанным шестнадцатеричным. Ключ DES без четности будет иметь размер 56 бит. Это означает, что вы должны создать недостающие биты четности. Паритет DES описывается следующим образом:

Один бит в каждом 8-битном байте KEY может использоваться для обнаружения ошибок при генерации, распределении и хранении ключа. Биты 8, 16,..., 64 используются для обеспечения того, чтобы каждый байт имел нечетную четность.

Обратите внимание, что биты нумеруются слева от значения 1, что означает, что наименьший бит каждого байта используется для контроля четности. Таким образом, вы должны распределить биты, которые вам дали, по байтам, а затем настроить четность каждого байта, возможно, перевернув младший бит (используя XOR с 1).

Обычно в библиотеках есть поддержка такого рода операций. В Java вы можете сделать это, сгенерировав ключ DES, используя, например, SecretKeyFactory.

person Maarten Bodewes    schedule 28.02.2015
comment
Если ключ шестнадцатеричный, это только 12*4=48 бит, а не 56. - person CodesInChaos; 28.02.2015
comment
@CodesInChaos Вы правы, я просто ожидал, что 56 бит слишком много, я думаю. Этот вопрос невозможно спасти без значительных правок, я собираюсь закрыть это неясным, о чем вы спрашиваете. - person Maarten Bodewes; 28.02.2015