В настоящее время я запутался в поведении алгоритма DES, предоставляемого пакетом GNU Crypto.Вот ссылка на рассматриваемый алгоритм: Алгоритм GNU Crypto DES
Первоначально я просто хотел извлечь состояние ключа (ей) в определенных точках, то есть после ПК-1,ПК-2, субключи и т. Д. Однако этот план не слишком удачен, так как 56-битный ключ, ожидаемый после ПК-1, представляется 48-битным, исходя из переменной pc1m (работая в предположении, что представление ключа (значение pc1m) при преобразовании из десятичной в двоичную является звуком).Поэтому я попытался выяснить этот фрагмент кода:
для (i = 0; i <56; i ++) {l = PC1 [i];pc1m | = ((kb [l >>> 3] & (0x80 >>> (l & 7)))! = 0)?(1L << (55-я)): 0;} </p>
Тем не менее, мое понимание побитовых операций является странным, и хотя у меня есть смутное представление о том, как оно оценивается, я не вижу общей логики для него и как оно работает (илискорее, почему он, кажется, на самом деле не работает - хотя алгоритм действительно шифрует и дешифрует успешно, используя официальные тестовые векторы).Где я могу получить 56-битную перестановку после ПК-1?
Мне также неясно, что делает код после «// Ключ шифрования первым», так как переменная pc1m не изменилась, и pcr появляетсяпросто скопируйте значение после всего этого.
На яркой стороне становится ясно, что «приготовление» ключей создает подключи для раундов Фейстеля.
В стороне, любые другиеРеализации Java, защищенные авторским правом, на которые вы можете ссылаться, могут представлять для меня интерес, однако я бы очень хотел поработать с этой реализацией.
Любая помощь будет очень, очень благодарна!Спасибо.