2016-05-21 7 views
-2

Клиент прислал мне зашифрованное сообщение с помощью функции Cipher.encrypt() (от какого-либо языка программирования неизвестного мне), как описано ниже:Что такое эквивалент этой функции Cipher.encrypt() в PHP

var key : String = "I deleted the key intentionally"; 
    var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8")); 

    var salt : String = "263BC60258FF4876"; 

    var message : String = "1234567891234567"; 

    var encryptAlgorithm : String = "AES/CBC/PKCS5Padding"; 

    var encryptedMessage : Cipher = new Cipher(); 
    encryptedMessage = encryptedMessage.encrypt(message, encodedKey, encryptAlgorithm, salt, 1); 

Мне нужно расшифровать сообщение, чтобы извлечь данные из него с помощью PHP. Я пытался использовать функцию PHP mcrypt_decrypt:

string mcrypt_decrypt (string $cipher , string $key , string $data , string $mode [, string $iv ]) 

Но я не мог расшифровать сообщение, так как появляются 2 функции имеют разные аргументы.

У кого-нибудь есть предложения относительно того, как расшифровать сообщение с помощью PHP?

+2

Кому-то необходимо сначала определить этот язык. –

+0

Похоже, что langauge - это [ActionScript] (http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/variables.html) –

+1

Лучше не использовать mcrypt, он является отказом, не был обновляется в течение лет и не поддерживает стандартное дополнение PKCS # 7 (née PKCS # 5), только нестандартное нулевое заполнение, которое нельзя даже использовать с двоичными данными. У mcrypt было много выдающихся [ошибок] (https://sourceforge.net/p/mcrypt/bugs/), относящихся к 2003 году .. Вместо этого рассмотрите использование [defuse] (https://github.com/defuse/php-encryption) , он поддерживается и является правильным. – zaph

ответ

0

Следующая строка не имеет смысла, она кажется «обратным».

var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8")); 

Предполагая, что ключ был в кодировке Base64 (что разумно) можно было бы ожидать, чтобы декодировать его в массив байтов и Encoding.toBase64 кажется неправильным. Но это квест, так как язык неизвестен, спросите клиента, что это за язык.

Далее появляется сообщение, зашифрованное с помощью дополнения PKCS # 5, и mcrypt не поддерживает это. Существует несколько решений: 1. Удалите дополнение в вашем PHP-коде. 2. Используйте лучшую библиотеку, которая поддерживает дополнение PKCS # 5, например defuse.

Ценный salt, вероятно, IV (Инициализационный вектор), плохо названный.