TripleDES — эквивалент phpseclib кода C #

я использую phpseclib для выполнения шифрования Triple DES.

Это то, что у меня есть для шифрования.

<?php

use phpseclib\Crypt\TripleDES;

class Foo
{

public function encrypt()
{
$encryptMe = new TripleDES();
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));
$encryptMe->setIV('jvz8bUAx');
$encryptMe->paddable = false;

$cipherText = $encryptMe->encrypt("{phrase:'user123',time:'9/11/2017 02:27:19 PM',username:'user1'}");

return rawurlencode(base64_encode($cipherText));
// result : Uru1%2BUpN7oelxj7ngPkkPoK%2FoIw8SoizR8fbDVX4Wicxi8DvY4kcau1fsUVAkNf1oLVr1g4RG0yD2LyL%2FNU7zDWv4cGxVQ%2FL
}

}

Это работает, но это не имеет тот же результат моего кода C # здесь: http://rextester.com/KNJGP9315

// C# result : Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR%2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw%3D%3D

РЕДАКТИРОВАТЬ:

Моя настройка C # Triple DES выглядит следующим образом:

Mode = CBC

Заполнение = нули

Я думаю, что я пропустил некоторые настройки или что-то. Любая помощь будет делать!

0

Решение

обновите свой php setKey() линия к:

$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi', true));

и результат:

Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR% 2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw% 3D% 3D

2

Другие решения

Несколько замечаний.

$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));

PHP md5 () По умолчанию функция возвращает строку в шестнадцатеричном формате. например. единственными символами в строке являются 0-F, а длина строки не 16, а 32 (поскольку для представления каждого байта требуется два символа 0-F, а не только один символ).

$encryptMe->paddable = false;

Это ничего не делает. Вы, вероятно, хотите сделать $encryptMe->disablePadding();,

1

По вопросам рекламы [email protected]