Моя компания работает над проектом, который позволит использовать картридеры в полевых условиях. Считыватели используют шифрование DUKPT TripleDES, поэтому нам нужно будет разработать программное обеспечение, которое будет расшифровывать данные карт на наших серверах.
Я только начал поверхностно разбираться в этом, но обнаружил, что застрял на, казалось бы, простой проблеме ... При попытке сгенерировать IPEK (первый шаг к воссозданию симметричного ключа).
IPEK - это 16-байтовое шестнадцатеричное значение, созданное путем объединения двух 8-байтовых шестнадцатеричных строк, зашифрованных тройным DES.
Я пробовал режимы ECB и CBC (нули для IV) с заполнением и без него, но результат каждой отдельной кодировки всегда составляет 16 байтов или более (2 или более блоков), когда мне нужен результат того же размера, что и ввод. Фактически, на протяжении всего этого процесса шифротексты должны быть того же размера, что и кодируемые открытые тексты.
<cfset x = encrypt("FFFF9876543210E0",binaryEncode(binaryDecode("0123456789ABCDEFFEDCBA98765432100123456789ABCDEF", "hex"), "base64") ,"DESEDE/CBC/PKCS5Padding","hex",BinaryDecode("0000000000000000","hex"))>
Результат: 3C65DEC44CC216A686B2481BECE788D197F730A72D4A8CDD
Если вы используете флаг NoPadding, результат будет следующим:
3C65DEC44CC216A686B2481BECE788D1
Я также пробовал кодировать шестнадцатеричное сообщение с открытым текстом как base64 (как ключ). В приведенном выше примере возвращается результат:
DE5BCC68EB1B2E14CEC35EB22AF04EFC.
Если вы сделаете то же самое, за исключением использования флага NoPadding, появится ошибка «Длина ввода не кратна 8 байтам».
Я новичок в криптографии, так что, надеюсь, я делаю здесь какую-то основную ошибку. Почему шифртексты, генерируемые этими алгоритмами блочного шифрования, не такой же длины, как сообщения с открытым текстом?
Для получения дополнительной информации, в качестве упражнения "проработайте это", я попытался воспроизвести работу, изложенную здесь:
https://www.parthenonsoftware.com/blog/how-to-decrypt-mintage-stripe-scanner-data-with-dukpt/
createObject()
используете ли вы какую-нибудь библиотеку / пакет java, которые могут справиться с этим лучше, и зарегистрируйте его в Coldfusion, чтобы вы могли сделать его частью вашей библиотеки и продолжайте двигаться вместе с разработкой CF. - person Frank Tudor   schedule 09.12.2014