WebHU - Programozási kérdések és válaszok

coldfusion 10 és mysql - problémák a korábban tárolt adatok visszafejtésével

Áthelyezek egy webhelyet CF8-ról CF10-re, és az egyik felmerülő probléma a mysql-ben tárolt adatok lekérése az aes_encrypt használatával a mysql-ben. Az oszlop blob. Amikor hozzáférek a dekódolt karakterláncot lekérő CFC-hez, egy bináris objektumot kapok vissza hibával:

ByteArray objects cannot be converted to strings. 

A CF8 rendszeren a következőket tudtam kiadni:

<cfoutput>#qryResult.decryptedString#</cfoutput>

CF10 alatt be kell csomagolnom egy toString()-be

<cfoutput>#toString(qryResult.decryptedString)#</cfoutput>

Nem tudom, hogy ez CF, MySQL vagy illesztőprogram-probléma-e, és a legjobb módja annak megoldására, vagy újabb lépést kell tennem a webhely átalakítása érdekében. Más szóval, a "toString()" a helyes megoldás, vagy van olyan adatbázis-paraméter, amelyet be lehet tenni a connect karakterláncba, hogy a dolgok a régiek maradjanak?


  • Segítene látni a qryResult.decryptedString-t generáló kódot vagy lekérdezést. Illetve milyen MySQL verziót és illesztőprogramot használsz? Feltételezve, hogy a CF-kód nem változott, valószínűleg illesztőprogram-probléma lehet. Néha előfordult, hogy a MySQL binárisan tér vissza karakterlánc helyett (nem a titkosításra jellemző). Általában ha implicit öntésről van szó. 11.12.2012
  • egy egyszerű tesztlekérdezés is sikertelen: SELECT AES_DECRYPT(sec_blob,'myreallysecurekey') AS decryptedString WHERE ...stb. Az új szerver 5.5.28, a régi 5.0.45. 11.12.2012

Válaszok:


1

Futtattam néhány tesztet ColdFusion 8-mal és 10-el (ugyanazon adatbázison), és hasonló eredményeket kaptam. A visszafejtett eredmény karakterláncként lett visszaadva a következőben: ColdFusion 8 (és MySQL-ben), de binárisan a ColdFusion 10-ben. Szóval gyanítom, hogy ez illesztőprogram-hiba, vagy esetleg szándékos változtatás (nem vagyok benne biztos).

Tesztlekérdezés

    <cfquery name="qTest" datasource="mySQL51">
        SELECT AES_DECRYPT(encryptedColumn, 'xxxxxxx') AS DecryptedResult
        FROM   test
        WHERE  ID = 1
    </cfquery>

    <cfoutput>
        class name = #qTest.decryptedResult[1].getClass().name#
    </cfoutput>

Eredmények

    ColdFusion  8  / class name = java.lang.String 
    ColdFusion 10  / class name = [B   (ie binary/byte array)

A különböző illesztőprogramok tesztelésén kívül a legegyszerűbb megoldás az érték karakterláncsá alakítása, ahogyan most is teszi. A konvertálást SQL-ben is elvégezheti:

   SELECT CAST(AES_DECRYPT(encryptedColumn, 'xxx') AS CHAR) AS DecryptedResult

.. vagy CF kódban. Csak ügyeljen arra, hogy olyan kódolást adjon meg, mint az UTF-8

  <!--- if result is binary, convert it to a string first --->
  <cfif IsBinary( qTest.decryptedResult )>
      <cfset decryptedString = charsetEncode( qTest.decryptedResult, "utf-8" )>
  </cfif>
11.12.2012
  • Köszi Leigh! Meglévő alkalmazásunkban csak néhány helyen található meg, ezért szükség esetén hozzáadtam a toString()-t a kimenetemhez. Van valami előnye/hátránya ennek a charsetEncode()-hoz képest? Ebben a mezőben a bevitel csak számokra korlátozódik (például hitelkártyaszám, de ez nem kártyaszám). 11.12.2012
  • Az egyetlen különbség, amivel tisztában vagyok, az az, hogy a toString az aktuális oldal kódolását használja, ha nem ad meg ilyet. Ez nem mindig kívánatos, ezért inkább kifejezetten megadom. Ettől eltekintve nem tudom, mekkora különbség van az egyszerű karakterláncok között. Csak annyit, hogy a _ 3_ 2_ a new over a dokumentumokat ajánlja. alkalmazásokat. 11.12.2012
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..