PHP加密字符串与C#不同

时间:2017-03-01 01:10:15

标签: c# php

我正在尝试使用C#和PHP加密字符串,我显然希望它们返回相同的值。

C#代码:

 public static string Encrypt(string toEncrypt)
    {

        int intLenght = toEncrypt.Length - 1;
        byte[] keyArray;
        byte[] ToEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
        MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
        keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(PKey));

        hashmd5.Clear();
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = keyArray;
        tdes.Mode = CipherMode.ECB;
        tdes.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = tdes.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(ToEncryptArray, 0, ToEncryptArray.Length);
        tdes.Clear();
        string res = System.Convert.ToBase64String(resultArray, 0, resultArray.Length);

        return res;
    }

PHP代码:

function decryptCode(){
$hash = base64_encode(md5($key, true));
$toDeco = checkCode();
if(!$toDeco)
{
    die("Invalid Code!");
}
$deco = utf8_decode($toDeco);

$data = openssl_encrypt($deco, 'DES-ECB', $key);




die($data);
}

C#返回的内容:0vY6hKcRYLA =

PHP返回的内容:0L9AwtASbvg =

键(pKey和$ key)当然都是一样的。我检查了md5哈希值,这些都是相同的,所以这不是问题。

是的,我知道这种方法(三重des,ecb)根本不是很安全,但它仅适用于学校项目。

这里的PHP代码有什么问题?有人能帮助我吗?

谢谢!

0 个答案:

没有答案