я использую 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
Заполнение = нули
Я думаю, что я пропустил некоторые настройки или что-то. Любая помощь будет делать!
обновите свой php setKey()
линия к:
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi', true));
и результат:
Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR% 2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw% 3D% 3D
Несколько замечаний.
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));
PHP md5 () По умолчанию функция возвращает строку в шестнадцатеричном формате. например. единственными символами в строке являются 0-F, а длина строки не 16, а 32 (поскольку для представления каждого байта требуется два символа 0-F, а не только один символ).
$encryptMe->paddable = false;
Это ничего не делает. Вы, вероятно, хотите сделать $encryptMe->disablePadding();
,