如何使用 aescbc 在 php5 中加密并在 windows 存储 8.1 和 c# 中解密

How to encrypt in php5 and decrypt in windows store 8.1 and c# using aescbc

大家好,我已经使用 AesCbc 方法对 PHP 中字符串中的单词 hello 进行了加密。这是我的代码。

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,'1234567890123456',pkcs7_pad('hello', 16),MCRYPT_MODE_CBC))

结果是

67fHA+Z12z2jlwOLTBeCPA==

然后我将这个结果发送到我的 windows 商店应用程序,这是我用来解密它的函数。

        public string AES_Decrypt(string input, string pass)
    {
        SymmetricKeyAlgorithmProvider SAP = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc);
        CryptographicKey AES;
        HashAlgorithmProvider HAP = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5);
        CryptographicHash Hash_AES = HAP.CreateHash();

        string decrypted = "";
        try
        {
            byte[] hash = new byte[32];
            Hash_AES.Append(CryptographicBuffer.CreateFromByteArray(System.Text.Encoding.UTF8.GetBytes(pass)));
            byte[] temp;
            CryptographicBuffer.CopyToByteArray(Hash_AES.GetValueAndReset(), out temp);

            Array.Copy(temp, 0, hash, 0, 16);
            Array.Copy(temp, 0, hash, 15, 16);

            AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(hash));

            IBuffer Buffer = CryptographicBuffer.DecodeFromBase64String(input);
            byte[] Decrypted;
            CryptographicBuffer.CopyToByteArray(CryptographicEngine.Decrypt(AES,Buffer,null), out Decrypted);
            decrypted = System.Text.Encoding.UTF8.GetString(Decrypted, 0, Decrypted.Length);

            return decrypted;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

结果是这样的

7��t�\a2H[=15=]��g

什么时候应该 "hello"。 那么我的代码哪里出错了?

密钥未在您的 PHP 代码中进行哈希处理。所以,不要在 C# 中这样做:

AES = SAP.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(
    System.Text.Encoding.UTF8.GetBytes(pass)
));