Расшифровка в PHP зашифрована в VB - PullRequest
2 голосов
/ 15 мая 2019

Я должен расшифровать данные в PHP, которые были зашифрованы в VB.Когда я расшифровываю числа, у меня нет проблем, но когда я дешифрую текст, я получаю только первые 8 символов, а затем случайные.Это ключ "a1R @ f7D $". Это то, что я пытаюсь расшифровать:

LwEe+sQCn63m9kjtqiy67ul5R1Ng7SZPVO4YYxQvZtUZBwNTb+Ey0qCNsrczI4jN

И я получаю это:

{Preinsc]hn��m�ȕ�!��^߇� $!  �E&;�e^#S�)6Ui�4�

Я пробовал с MCRYPT_RIJNDAEL_256 и ecb, но ничегоработал для меня.

function decrypt($data ){
   $encryption_key = "a1R@f7D$";
    $data = urldecode($data);
    $key = md5(utf8_encode($encryption_key), true);
    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);
    $data = base64_decode($data);
    $data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');
    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = ord($data[$len-1]);
    return substr($data, 0, strlen($data) - $pad);
}

Эта функция, которая зашифровала это:


Public Shared Function tryingTripleDes (ByVal value As String, ByVal key As String) As String

        Dim des As New Security.Cryptography.TripleDESCryptoServiceProvider

        des.IV des.IV = New Byte(7) {}

        Dim pdb As New Security.Cryptography.PasswordDeriveBytes(key, New Byte(-1) {})

        des.Key = pdb.CryptDeriveKey("RC2", "MD5", 128, New Byte(7) {})

        Dim ms As New IO.MemoryStream((value.Length * 2) - 1)

        Dim encStream As New Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), Security.Cryptography.CryptoStreamMode.Write)

        Dim plainBytes As Byte() = Text.Encoding.UTF8.GetBytes(value)

        encStream.Write(plainBytes, 0, plainBytes.Length)

        encStream.FlushFinalBlock()

        Dim encryptedBytes(CInt(ms.Length - 1)) As Byte

        ms.Position = 0

        ms.Read(encryptedBytes, 0, CInt(ms.Length))

        encStream.Close()

        Return Convert.ToBase64String(encryptedBytes)

    End Function

1 Ответ

0 голосов
/ 15 мая 2019

Это обычно происходит, если зашифрованный текст шифруется CBC с нулевым байтом IV. Другие режимы также могут работать, но CBC является наиболее вероятным. Ваш ключ и шифр верны, иначе вы только получите взамен мусор - конечно, не читаемый текст.

Обратите внимание, что MCRYPT_RIJNDAEL_256 даже не AES, поэтому, пытаясь сделать это бесполезным, вы должны использовать MCRYPT_RIJNDAEL_128 с ключом правильного размера, чтобы получить AES.

Я не буду вдаваться в безопасность CBC с нулевым байтом IV и устаревшим шифром, как 3DES. Это не очень хорошая идея, особенно для безопасности на транспорте.

...