首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的C# TripleDES TripleDES加密

PHP中的C# TripleDES TripleDES加密
EN

Stack Overflow用户
提问于 2015-07-27 14:44:13
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
复制
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中所做的:

代码语言:javascript
复制
    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函数添加真正的参数,我知道我需要添加PKCS7填充。

我还没有机会对照C#代码来检查它,因为我还在我的计算机上安装visual。我遗漏了什么吗?我需要补充静脉滴注吗?

编辑:我测试了C#代码,发现它并没有给出相同的结果。我修复了一些东西,现在有了来自C#的C#和缓冲区变量,给出了正确的结果。

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

代码语言:javascript
复制
$desKey .= substr($desKey,0,8);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 18:21:14

这就是我最后想出来的。到目前为止,在我尝试过的几个例子中,它对我起了作用。

代码语言:javascript
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31656191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档