2017-09-11 3 views
0

J'utilise phpseclib pour effectuer le cryptage Triple DES.TripleDES - équivalent phpseclib du code C#

Voici ce que j'ai pour le cryptage.

<?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 
    } 

} 

Il fonctionne, mais il est de ne pas avoir le même résultat de mon code C# ici: http://rextester.com/KNJGP9315

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

EDIT: réglage

Mon C# Triple DES est comme suit:

Mode = CBC

Padding = Zeros

Je pense que j'ai manqué un paramètre ou quelque chose. Toute aide fera l'affaire!

+2

Il ne va pas aider quelqu'un à revenir à cette question dans un an pour avoir tout le code C# manquant, et le seul indice qu'il y ait jamais eu est un lien mort? Veuillez conserver tous les détails de la question, y compris le code, dans la question elle-même. –

Répondre

2

mise à jour de votre php setKey() ligne:

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

et le résultat est:

Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR% 2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw% 3D% 3D

1

Quelques observations.

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

PHP's md5() La fonction renvoie par défaut une chaîne codée hexadécimale. par exemple. les seuls caractères dans la chaîne sont 0-F et la longueur de la chaîne n'est pas 16 mais plutôt 32 (puisqu'il faut deux caractères 0-F pour représenter chaque octet au lieu d'un seul caractère).

$encryptMe->paddable = false; 

Cela ne fait rien. Vous voulez probablement faire $encryptMe->disablePadding();.