【问题标题】:C# TripleDES ECB Encryption in PHPPHP 中的 C# TripleDES ECB 加密
【发布时间】:2023-03-25 09:10:02
【问题描述】:

我主要使用 PHP,但我将数据发送到使用 C# 进行加密的 api,因此我尝试使用以下 C# 代码中使用的相同方法在 PHP 中加密密码:

System.Security.Cryptography.TripleDESCryptoServiceProvider DES = new System.Security.Cryptography.TripleDESCryptoServiceProvider();
System.Security.Cryptography.MD5CryptoServiceProvider hashMD5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
DES.Key = hashMD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(Key));
DES.Mode = System.Security.Cryptography.CipherMode.ECB;
System.Security.Cryptography.ICryptoTransform DESEncrypt = DES.CreateEncryptor();
Buffer = System.Text.ASCIIEncoding.ASCII.GetBytes(Plaintext);
string TripleDES = Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
return TripleDES;

这是我目前在 PHP 中所拥有的:

    function encryptData($key, $plainText)
    {

        $byte = mb_convert_encoding($key, 'ASCII');
        $desKey = md5(utf8_encode($byte), true);
        $data = mb_convert_encoding($plainText, 'ASCII');

        // add PKCS#7 padding
        $blocksize = mcrypt_get_block_size('tripledes', 'ecb');
        $paddingSize = $blocksize - (strlen($data) % $blocksize);
        $data .= str_repeat(chr($paddingSize), $paddingSize);

        // encrypt password
        $encData = mcrypt_encrypt('tripledes', $desKey, $data, 'ecb');

        echo base64_encode($encData);
    }

我知道我需要为 md5 函数添加 true 参数,并且我知道我需要添加 PKCS7 填充。

我没有机会根据 C# 代码检查它,因为我仍在我的计算机上安装 Visual Studio。有什么我想念的吗?我需要添加静脉注射吗?

编辑:我测试了 C# 代码,发现它没有给出相同的结果。我修复了一些问题,现在 PHP 中的 C# 中的 DES.Key 和 Buffer 变量得到了正确的结果。

再次编辑:已修复。我所要做的就是将前 8 个字符附加到散列键的末尾。

$desKey .= substr($desKey,0,8);

【问题讨论】:

  • 添加填充部分后,我没有得到任何响应,因为我错误地尝试使用 $desKey 作为函数。应该在它的位置吗?
  • 没关系我找到了 :)

标签: c# php encryption tripledes


【解决方案1】:

这是我最终想出的。到目前为止,在我尝试过的几个例子中,它对我有用。

function encryptData($key, $plainText)
{

    $byte = mb_convert_encoding($key, 'ASCII');
    $desKey = md5(utf8_encode($byte), true);
    $desKey .= substr($desKey,0,8);

    $data = mb_convert_encoding($plainText, 'ASCII');

    // add PKCS#7 padding
    $blocksize = mcrypt_get_block_size('tripledes', 'ecb');
    $paddingSize = $blocksize - (strlen($data) % $blocksize);
    $data .= str_repeat(chr($paddingSize), $paddingSize);

    // encrypt password
    $encData = mcrypt_encrypt('tripledes', $desKey, $data, 'ecb');

    echo base64_encode($encData);
}

encryptData('key', 'pass');

【讨论】:

  • 男人!你为我节省了太多时间!非常感谢!
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多