2017-09-11 9 views
0

私はphpseclibをトリプルDES暗号化に使用しています。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 

EDIT:次のように

私の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です(1文字の代わりに2バイトの0-F文字が必要です)。

$encryptMe->paddable = false; 

これは何もしません。あなたはおそらく$encryptMe->disablePadding();をしたいと思っています。