Jeg er stødt på et ældre projekt hos en kammerat som han stadig bruger og har bedt om hjælp til, men vi er begge lidt i tvivl om what to do
Det benytter nogle funktioner som er udgået, og han skal opdaterer mcrypt_encrypt, mcrypt_decrypt, mcrypt_get_iv_size
Han har noget data i databasen som er krypteret og bliver dekrypteret med nedenstående kode. Han kører på PHP 7.0 hvor det virker, men skal opgradere til 7.4 eller 8.0 eller 8.1 (skal helst virke på alle dem det nye)
Der er ikke tale om password så de skal hashes, men derimod data som bare skal ligge mere sikkert og krypteret. Den henter tit ud, så der skal være god afvejning mellem sikkerhed og hvor tungt det bliver.
Så spørgsmål: 1: Hvad er alternativet til nedenstående?
2: Og vil det kræve man henter alt data ud, dekrypterer det med det gamle script, for så at kunne krypterer det med et nyt script - eller hvordan gør man smartest?
Kan jeg ikke lige huske - men han har vist desværre ikke adgang til at kunne installere på webhotellet. Jeg læste nogle skrev man skulle skifte til openssl_encrypt som var med i PHP - men tænker det kræver man: 1: Finder ud af hvordan det bruges 2: Henter alt ud og dekryptere det 3: Krypterer alt med openssl_encrypt 4: Og derefter bruger openssl_decrypt Er det den smarteste løsning?
Du kan nok ikke installere det på et gængs webhotel, men spørg supporten om de kan. Den eneste forskel er at det ikke følger med som standard, og er lidt gammel.
Men hvis de ikke vil, så er det du skriver nok en løsning.
arne_v Det lyder godt - så kan man i virkeligheden lade det ligge måske og så bare bruge openssl_decrypt og openssl_encrypt
Lige et par spørgsmål: 1: Kan man også encrypte til samme format med openssl_encrypt (så database kan bibeholdes som den er)
2: Når jeg skal decrypte, så er denne brugt til at lave iv (iv er ikke gemt i database eller lign) $iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
Men den kan jeg jo ikke længere bruge, så hvordan får jeg $iv til openssl_decrypt funktionen?
|This is a little test!| |This is a little test!| |This is a little test!| t7Ag1CHqmIr8+hMvx/GaE7gq6gibsVJ2/wiXiERrmHA= t7Ag1CHqmIr8+hMvx/GaE7gq6gibsVJ2/wiXiERrmHA= |This is a little test!|
Det er måske den måde jeg bruger $data her openssl_decrypt($data for ved ikke om det kun er en del af det der skal bruges da gammel sætning var $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, hash('sha256', $code, true), substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), MCRYPT_MODE_CBC, $iv), "\0");
Nåh ja det giver mening. Har prøvet det nu men stadig med forkert resultat Før brugte jeg mcrypt_get_iv_size til at splitte og fandt openssl_cipher_iv_length som jeg tænker matcher
Jeg får samme iv og datastring som før så må have lavet en fejl i selve openssl_decrypt funktionen
String = Det der er gemt i databasen $code = min hemmelige kode
Altså IV size er altid 16 for AES, så jeg ville bare hardcode den.
Du skal huske at ændre værdien hvis du nogensinde skifter algoritme til noget som ikke har block size 16. Men det er næppe noget som sker i nærmste fremtid.
|This is a little test!| n7lRHCgX9FcqS++wrid7LKfmFcV3foI5x1r2FzpVqwbbD/7pf/1372mvK1g++F3p |This is a little test!| |This is a little test!| n7lRHCgX9FcqS++wrid7LKfmFcV3foI5x1r2FzpVqwbbD/7pf/1372mvK1g++F3p
p original = |This is a little test!| db mcrypt encrypt = /R3xY3XkK8+Mu+jHWjgjaySejVbhuiNsv7kyld9j+yO70mN+TUsFIlzj2udP2GIa p mcrypt_decrypt = |This is a little test!| p openssl decrypt = |This is a little test!| db openssl encrypt = /R3xY3XkK8+Mu+jHWjgjaySejVbhuiNsv7kyld9j+yO70mN+TUsFIlzj2udP2GIa
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.