TripleDES - 相当于 C# 代码的 phpseclib
TripleDES - phpseclib equivalent of C# code
我正在使用 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#三重DES设置如下:
模式 = CBC
填充 = 零
我想我错过了一些设置什么的。任何帮助都可以!
几点观察。
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));
PHP's md5()函数returns,默认为十六进制编码的字符串。例如。字符串中唯一的字符是 0-F,字符串长度不是 16,而是 32(因为它需要两个 0-F 字符来表示每个字节,而不是仅仅一个字符)。
$encryptMe->paddable = false;
那没有任何作用。你可能想做 $encryptMe->disablePadding();
.
将您的 php setKey()
行更新为:
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi', true));
结果是:
Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR%2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw%3D%3D
我正在使用 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#三重DES设置如下:
模式 = CBC
填充 = 零
我想我错过了一些设置什么的。任何帮助都可以!
几点观察。
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi'));
PHP's md5()函数returns,默认为十六进制编码的字符串。例如。字符串中唯一的字符是 0-F,字符串长度不是 16,而是 32(因为它需要两个 0-F 字符来表示每个字节,而不是仅仅一个字符)。
$encryptMe->paddable = false;
那没有任何作用。你可能想做 $encryptMe->disablePadding();
.
将您的 php setKey()
行更新为:
$encryptMe->setKey(md5('cEvu4MHkqz7mQgeqmB6mQEXi', true));
结果是:
Hq3BJmupqU6KuvJQ3aoPvQfopOoAaD0RGoFCIDj6U9uIR%2BJloaS2X7klHSfwhptEuoEz5iPeRNbJnwZmOfM1Aw%3D%3D