Выяснение точного ключа, созданного PHP mcrypt

Приложение PHP, которое я поддерживаю, использует Rijndael _256 с шифрованием EBC ​​_MODE с mcrypt. Забавно, что длина ключа не 256 бит, а всего 160. Согласноmcrypt_encryptдокументации ключ дополняется \0, чтобы получить требуемый размер, если он слишком мал.

The key with which the data will be encrypted. If it's smaller than the required keysize, it is padded with '\0'. It is better not to use ASCII strings for keys.

Похоже, это происходит примерно в начале строки 1186 в mcrypt.c и изменении ключа в строке 1213.

Допустим, у нас есть $key = 'abcdefghijkm';, который слишком короткий, но реализация mcrypt в PHP гарантирует, что он будет расширен до 32 символов (или 256 бит )при использовании RIJNDAEL _256. Как будет выглядеть окончательный ключ нравится?

Я спрашиваю об этом, потому что создается другое приложение, которое использует те же зашифрованные данные, но на другом языке. Perl, если быть точным, и я используюCrypto::Rijndael. Для данного примера ключа, какой точный ключ я должен передатьCrypto::Rijndael(или любой другой в этом отношении ), чтобы иметь возможность снова расшифровать данные?

Обновление

С помощью Perl я могу сгенерировать ключ с добавлением \0 pack('a32', 'my secret key');(. илиZ32), length()сообщит 32 и модуль Crypt::Rijndaelпринимает ключ. Глядя на источник PHP mcrypt, это должен быть сгенерированный ключ (\0 с дополнением ), но он просто не примет его.

Теоретически в PHP pack('a32', 'my secret key');должен быть получен тот же ключ с добавлением \0, что и mcrypt в PHP, но это не так.

Я очень близок к тому, чтобы снова все зашифровать, но с новым ключом. Это занимает слишком много времени.

12
задан Htbaa 19 July 2012 в 09:36
поделиться