2017-09-11 1 views
0

트리플 DES 암호화를 수행하는 데 phpseclib을 사용하고 있습니다.TripleDES - C# 코드와 동일한 phpseclib

이것은 암호화를위한 것입니다.

<?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# 삼중 DES 설정 될 때 :

모드 = CBC

패딩 = 제로

나는 약간의 설정이나 무언가를 놓쳤다 고 생각합니다. 어떤 도움이 될 것입니다!

+2

그것은 누군가가 돌아 오는 데 도움이되지 않습니다 이 질문은 1 년 만에 모든 C# 코드가 누락되었습니다. 그리고 유일한 힌트는 죽은 링크입니다. 질문을 포함하여 질문의 모든 세부 사항을 질문 자체에 보관하십시오. –

답변

2

갱신하여 PHP setKey() 라인 :

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

그 결과는 다음과 같습니다

Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR % 2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw %의 3D % 3D

1

몇 가지 관찰.

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

PHP's md5() 함수는 기본적으로 16 진수로 인코딩 된 문자열을 반환합니다. 예. 문자열의 유일한 문자는 0-F이고 문자열 길이는 16이 아니라 32입니다 (단 하나의 문자 대신 모든 바이트를 나타내는 두 개의 0-F 문자가 필요하기 때문입니다).

아무 것도하지 않습니다. 아마도 $encryptMe->disablePadding();을하고 싶을 것입니다.