Znalezienie dokładnego klucza stworzonego przez mcrypt PHP

Aplikacja PHP, którą utrzymuję, używa Rijndael_256 z szyfrowaniem EBC_MODE za pomocą mcrypt. Zabawą jest to, że klucz nie ma 256 bitów długości, ale tylko 160. Zgodnie zmcrypt_encrypt dokumentacja klucz jest wypełniony 0, aby uzyskać wymagany rozmiar, jeśli jest zbyt mały.

Klucz, za pomocą którego dane będą szyfrowane. Jeśli jest mniejszy niż wymagany klucz, jest wypełniony „0”. Lepiej nie używać ciągów ASCII do kluczy.

Wydaje się, że dzieje się to na początkuwiersz 1186 w mcrypt.c i modyfikowanie klucza w linii 1213.

Więc powiedzmy, że mamy$key = 'abcdefghijkm'; jest to zbyt krótkie, ale implementacja mcrypt w PHP zapewnia, że ​​podczas korzystania z RIJNDAEL_256 zostanie on rozszerzony do 32 znaków (lub 256 bitów). Jak będzie wyglądał ostatni klucz?

Pytam o to, ponieważ budowana jest inna aplikacja, która używa tych samych zaszyfrowanych danych, ale jest w innym języku. Perl, aby być dokładnym i używamCrypto::Rijndael. Dla danego klucza przykładowego, jaki jest dokładny klucz, który musiałbym podaćCrypto::Rijndael (lub jakiekolwiek inne), aby móc ponownie odszyfrować dane?

Aktualizacja

Z Perlem mogę wygenerować klucz, który jest wypełnionypack('a32', 'my secret key'); (lubZ32),length() zgłosi 32 iCrypt::Rijndael moduł akceptuje klucz. Przyglądając się źródłu mcryptów PHP, powinien to być klucz, który jest generowany (0 padded), ale po prostu tego nie przyjmie.

Teoretycznie w PHPpack('a32', 'my secret key'); Powinien dać ten sam wypełniony klucz, który generuje mcrypt PHP, ale tak nie jest.

Jestem bardzo blisko, aby ponownie zaszyfrować wszystko, ale z nowym kluczem. To zajmuje zbyt dużo czasu.

questionAnswers(2)

yourAnswerToTheQuestion