Autor | Zpráva | ||
---|---|---|---|
pajadvorak Profil |
#1 · Zasláno: 21. 9. 2016, 20:06:44
Mám tento kód a pracuji s PHP 5.2. Nevím jak mám správně zašifrovat a podepsat řetězec. Dole v kódu je generovaný PKP, který mi to píše, ale potřeboval bych z toho dostat "správný PKP" (též níže). Za jakoukoliv pomoc děkuji.
potřebuji SHA256withRSA $cert_info = array(); if (! $cert_store = file_get_contents ( "certifikaty/01000003.p12" )) { echo "Error: Unable to read the cert file<br />" ; exit; } if ( openssl_pkcs12_read ( $cert_store , $cert_info , "eet" )) { echo "Certificate Information<br />" ; print_r ( $cert_info ); } else { echo "Error: Unable to read the cert store.<br />" ; exit; } // řetězec, který chceme podepsat $retezec = 'CZ1212121218|273|/5546/RO24|0/6460/ZQ42|2016-08-05T00:30:12+02:00|34113.00'; // podpis $podpis = ''; // podpisový klíč - privátní $pk = $cert_info['pkey']; // funkce, která nám vytvoří podpis openssl_sign($retezec, $podpis, $pk, "SHA256"); $podpis = hash('SHA256',$podpis); $podpis = base64_encode($podpis); $binary_signature = ""; $algo = "SHA256"; openssl_sign($retezec, $binary_signature, $pk, $algo); print(base64_encode($binary_signature) ."\n"); Generovaný PKP: ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NQ== echo "Správný PKP:<br />"; echo "D84gY6RlfUi8dWdhL1zn0LE0s+aqLohtIxY0y88GoG5Ak8pBEH3/Ff2aFW7H6fvRxDMKsvM/VIYtUQxoDEctVGMSU/JDf9Vd0eQwgfLm683p316Sa4BUnVrIsHzwMyYkjpn66I072G2AvOUP4X5UiIYtHTwyMVyp+N/zzay3D7Q619ylDb6puN2iIlLsu+GNSB9DvsQbiLXPH6iK0R9FpR15v2y+0Uhh8NNJKl7O8Us9jbgokrA9gze+erQbhmwTm2nn2+7JGrPDqhyhwWZNLUziGSbC99wJpkEnIs0das/4hFNE3DnLvv4MsXwWCLOUZty6t6DAijlCzQj7KFKw0g=="; |
||
TomášK Profil |
Z toho popisu mi není jasné, proč jsou tam dva bloky s openssl_sign - jeden je špatně a druhý správně? Nebo tam ten jeden je jen navíc?
Momentálně vstup akorát zahashuješ a převádíš z jednoho kódování do druhého. Vstup: CZ1212121218|273|/5546/RO24|0/6460/ZQ42|2016-08-05T00:30:12+02:00|34113.00 SHA256 otisk vstupu, zapsaný hexadecimálně: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA256 otisk vstupu, zapsaný hexadecimálně, a poté zakódovaný do base64: ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NQ Neznám interface openssl natolik, abych ti i dokázal říct, co je špatně. Momentálně se ten privátní klíč vůbec nepoužije. Zkusil bych nahradit SHA256 za SHA256withRSA, ale přijde mi, že bude potřeba i něco dalšího. Tip: kódovat hex text do base64 je skoro určitě vždy špatné, nejdřív je potřeba převést hex do binárního zápisu a ten pak teprv převést do base64. |
||
pajadvorak Profil |
#3 · Zasláno: 22. 9. 2016, 21:44:14
TomášK:
Jsou tam pro ukázku, že mi to nefunguje a ten druhý jak by to mělo vyjít... Každopádně problém je v tom, že PHP 5.2 to nezvládá... takže přesunu webu na PHP 5.4 a mělo by to být ok... :-) Tak uvidíme... |
||
Fisir Profil |
#4 · Zasláno: 23. 9. 2016, 07:48:25
Reaguji na pajudvoraka:
Přesuň to na PHP 5.6, verze 5.4 je zastaralá, nepodporovaná a nebezpečná. |
||
pcmanik Profil |
#5 · Zasláno: 23. 9. 2016, 08:40:19
pajadvorak:
Keď už teda ideš aktualizovat rovno prejdi na PHP7 a ušetríš si ďalšie starosti do budúcna. V aktuálnom kóde by si nemal potrebovať žiadne zmeny resp. len minimum. |
||
pajadvorak Profil |
Fisir:
Díky za tip. Ale toho se momentálně bojím... :-( jede nám na tom celý systém a vím, že když jsem to přesouval na PHP 5.5 byli s tím nějaké potíže a z důvodu nedostatku času se to vracelo opět zpět... Momentálně si nemohu dovolit větší výpadek... A bohužel nemám po ruce někoho tak zkušeného, abychom to celé rozhrabali.. :-( Fisir: Tak jsem mluvil se svým kamarádem, co mi s tím bude pomáhat a budeme to přesouvat na PHP 5.5 (což je nejvyšší verze na dosavadním hostingu)... a uvidíme ;-) |
||
Časová prodleva: 6 let
|
0