【问题标题】:TripleDES - phpseclib equivalent of C# codeTripleDES - phpseclib 等效于 C# 代码
【发布时间】:2017-09-11 11:39:57
【问题描述】:

我正在使用 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

填充 = 零

我想我错过了一些设置或什么。任何帮助都可以!

【问题讨论】:

  • 如果有人在一年后回到这个问题,所有的 C# 代码都丢失了,而且唯一的提示是死链接,这对人们没有帮助吗?请在问题本身中保留问题的所有详细信息,包括代码。

标签: php encryption phpseclib tripledes


【解决方案1】:

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

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

结果是:

Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR%2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw%3D%3D

【讨论】:

    【解决方案2】:

    一些观察。

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

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

    $encryptMe->paddable = false;
    

    这没有任何作用。你可能想做$encryptMe-&gt;disablePadding();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2014-03-21
      相关资源
      最近更新 更多