TripleDES - 相当于C#代码的phpseclib

时间:2017-09-11 11:39:58

标签: php encryption phpseclib tripledes

我正在使用phpseclib进行三重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设置如下:

模式= CBC

Padding = Zeros

我想我错过了一些设置或其他东西。任何帮助都可以!

2 个答案:

答案 0 :(得分:2)

将您的php setKey()行更新为:

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

结果是:

  

Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR%2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw%3D%3D

答案 1 :(得分:1)

一些观察结果。

$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));
默认情况下,

PHP's md5()函数返回十六进制编码的字符串。例如。字符串中唯一的字符是0-F,字符串长度不是16,而是32(因为它需要两个0-F字符来表示每个字节而不是单个字符)。

$encryptMe->paddable = false;

那没有做任何事情。您可能想要$encryptMe->disablePadding();