PHP Encrypt and Windows Decrypt

后端 未结 3 1649
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-07 13:49

I \'m stuck. It seems that AES encryption done by PHP cannot be decrypted in windows.

PHP code:

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL         


        
3条回答
  •  粉色の甜心
    2021-02-07 14:24

    See below URL

    Encrypt in PHP, Decrypt in C# (WP7 / Silverlight) using AES / Rijndael

    http://pumka.net/2009/12/16/rsa-encryption-cplusplus-delphi-cryptoapi-php-openssl-2/

    http://www.developer.nokia.com/Community/Wiki/Encrypt-Decrypt_contacts_database_entries_using_Symbian_C%2B%2B

    Read it

    I droped the MD5 crap out of PHP and C#, and they are now working properly.

    Just in case you dropped here looking for the same answer, here is a sample code. Don't forget to make your own key and iv (although those bellow will work, is not recommended to use!)

    PHP:

    function encrypt128($message) {
    
        $vector = "0000000000000000";
        $key = "00000000000000000000000000000000";
    
        $block = mcrypt_get_block_size('rijndael_128', 'cbc');
        $pad = $block - (strlen($message) % $block);
        $message .= str_repeat(chr($pad), $pad);
    
        $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', '');
        mcrypt_generic_init($cipher, $key, $vector);
        $result = mcrypt_generic($cipher, $message);
        mcrypt_generic_deinit($cipher);
    
        return base64_encode($result);
    }
    

    C++

    Encrypt-Decrypt contacts database entries using Symbian C++

    http://www.developer.nokia.com/Community/Wiki/Encrypt-Decrypt_contacts_database_entries_using_Symbian_C%2B%2B

    Headers Required:

    #include  // CContactDatabse, 
    #include  //CContactItem,CContactItemFieldSet
    

    http://www.developer.nokia.com/Community/Wiki/Encrypt-Decrypt_contacts_database_entries_using_Symbian_C%2B%2B

    Encrypt Contact Fields

    void CEncryptContactContainer::EncryptAll()
    {
        CContactDatabase *contactDB = CContactDatabase::OpenL();
        CleanupStack::PushL(contactDB);
    
        TContactIter iter(*contactDB);
        TContactItemId aContactId;
    
    //Developer can take Heap based descriptor for large/unknown size of contact items.
        TBuf16<70> aValue; 
    
        const CContactIdArray* contactArray = contactDB->SortedItemsL();
    
        TInt cnt=contactArray->Count();
    
        for(TInt i=0;iOpenContactL((*contactArray)[i]);
            CleanupStack::PushL(contactItem);
    
            CContactItemFieldSet& fieldSet= contactItem->CardFields();
            TInt fieldCount=fieldSet.Count(); // This will give number of contact fields.
    
            for(TInt index=0; index < fieldCount; index++)
            {
                CContactItemField& field = fieldSet[index];
                const CContentType& type = field.ContentType();
                if(!(type.ContainsFieldType(KUidContactFieldBirthday)))
                {
                    TPtrC name = contactItem->CardFields()[index].TextStorage()->Text();
                    aValue.Copy(name);
                    Encrypt(aValue); // Call real encyption here
                    contactItem->CardFields()[index].TextStorage()->SetTextL(aValue);
                }
            } //Inner for loop ends here
            contactDB->CommitContactL(*contactItem);
            CleanupStack::PopAndDestroy(contactItem);
        } //Outer for loop ends here
        CleanupStack::PopAndDestroy(contactDB);
    }
    
    void CEncryptContactContainer:: Encrypt (TDes& aValue)
    {
        for(TInt iCount=0; iCount< aValue.Length();iCount++)
        {
            aValue[iCount]+=3;
        }
    }
    

    Decrypt Contact Fields

    void CEncryptContactContainer::DecryptAll()
    {
        CContactDatabase *contactDB = CContactDatabase::OpenL();
        CleanupStack::PushL(contactDB);
    
        TContactIter iter(*contactDB);
        TContactItemId aContactId;
        TBuf16<70> aValue;
    
        const CContactIdArray* contactArray = contactDB->SortedItemsL();
    
        TInt cnt=contactArray->Count();
    
        for(TInt i=0;iOpenContactL((*contactArray)[i]);
            CleanupStack::PushL(contactItem);
    
            CContactItemFieldSet& fieldSet= contactItem->CardFields();
            TInt fieldCount=fieldSet.Count(); // This will give number of contact fields.
    
            for(TInt index=0; index < fieldCount; index++)
            {
                CContactItemField& field = fieldSet[index];
                const CContentType& type = field.ContentType();
                if(!(type.ContainsFieldType(KUidContactFieldBirthday)))
                {
                    TPtrC name = contactItem->CardFields()[index].TextStorage()->Text();
                    aValue.Copy(name);
                    Decrypt(aValue);
                    contactItem->CardFields()[index].TextStorage()->SetTextL(aValue);
                }
            } //Inner for loop ends here
            contactDB->CommitContactL(*contactItem);
            CleanupStack::PopAndDestroy(contactItem);
        } //Outer for loop ends here
        CleanupStack::PopAndDestroy(contactDB);
    }
    
    void CEncryptContactContainer:: Decrypt (TDes& aValue)
    {
        for(TInt iCount=0; iCount< aValue.Length();iCount++)
        {
            aValue[iCount]-=3;
        }
    }
    

    C#:

    byte[] cripted = EncryptStringToBytes("Test", System.Text.Encoding.UTF8.GetBytes("00000000000000000000000000000000"), System.Text.Encoding.UTF8.GetBytes("0000000000000000"));
    

提交回复
热议问题