Diskuze: SHA256withRSA
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 50 zpráv z 50.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Nejsem javista, ale po nahlédnutí dokumentace mi to připomíná php funkci opensll_sign()
$retezec = 'tvuj retezec';
$podpis = '';
$pk = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
// ...
-----END RSA PRIVATE KEY-----
EOD;
openssl_sign($retezec, $podpis, $pk, "SHA256");
//v $podpis by nyní měl být podpis v binární formě.
//pro obvyklý výstup je potřeba ještě převést
$output = base64_encode($podpis);
nešla by použít? případně koukni ještě do dokumentace PHP tam toho bude určitě víc
Díky to vypadá, že bude ono. Ale pracuji s certifikátama a podpisama
poprvé a nejsem z toho úplně moudrej. Mám k tomu tento zip se souborama a nejsem si jistej kterez z nich a jak
použít. (jsou jen testovací ) Mám tedy otevřít soubor ca.cer jeho obsah použít jako podpis a
nebo certifikát v souboru cer.pem? A $pk (doufam ze myslis private key ) je tedy v souboru crl.pem? a
jako poslední parametr uvádíš SHA256 ale ve specifikaci je can be one of
OPENSSL_PKCS1_PADDING, OPENSSL_SSLV23_PADDING, OPENSSL_PKCS1_OAEP_PADDING,
OPENSSL_NO_PADDING.
Možná to píšu celé blbě tak prosím o vysvětlení a opravu. Hodně mi to
pomůže
Private key by měl jít vytáhnout z souborů .pem ovšem jestli do těch tvých dobře koukam obsahuje pouze klíč veřejný..
Ano $pk je private key.
Ten poslední parametr "SHA256" tam musí být pokud to chceš mít SHA256 nejsemsi jistý co všechno se s tím dá ještě dělat jiného a jinak, ale tohle je vyzkousene že funguje
Pochopil jsem tedy správně, že podpis to dole mezi -----BEGIN
CERTIFICATE----- a -----END CERTIFICATE-----
pokud tu funkci použiju vypíše chybu openssl_sign() expects parameter 4 to be
long tedy chybu 4. parametru ale je to divný tam asi chyba nebude, stejnou
hlásí i pokud tam dám něco podle specifikace PHP, pokud ten parametr
odstaním úplně chyba je supplied key param cannot be coerced into a private
key. POkud tam tedy dávám správně podpis měl bych si asi prověřit ten pk
co
To je certifikát samotný. Kousek nad tím máš public key a private key který potřebuješ tam nevidím.
Tak to nevím pokud to zapíšu takto
<?php
$retezec = 'tvuj retezec';
$podpis = '';
$pk = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJBAMPrNeoR+OvJIDtCr8mSWXmr0SllhyeBD+qOqOeUcf1akGDOWdYJ
Wk2p92JtMM2RWVcV8+3UHxa/GsuD9f2y970CAwEAAQJAXQZ77Q5nkR1Irpq1eRKC
ZaFNiUhp6jn/4rGmRX9YuKDJKtuL5eEfzUL4NWbbYwe+oIfn6IQ7F2pC+66ygP+I
yQIhAOFNIwM32G1+6C6w+qXXE6ynOheroNwVgFOT9SQx6eC/AiEA3p0qUfuW1zN2
ZfxNVcDPb1ApMC82NcutjmuFSpmiioMCIHojHv/3nlR9n9DwEHEnD3thjJSYbjPh
VBf69cIRbQBxAiBdnydvNynm84O1vHghumcC32mTFCfuU+x32wxBpX9QVQIgBewC
ekhKtep8NFvelVEOgJMbymg+AlbYdY/cB+Da2g4=
-----END RSA PRIVATE KEY-----
EOD;
openssl_sign($retezec, $podpis, $pk, "SHA256");
echo base64_encode($podpis);
funguje to bez problémů a vypíše podpis
"vJYfk6WSEqtDSZ9GcfokgpQPgJ0o4hlQD5ADTC83psRPCHFELZn9Bl65f8eEIaJluGfw91KzhgODpiE5nRLIjg=="
Max jestli se funkčnost neliší verzí PHP...
(použitý klíč je náhodný RSA private key vygenerovaný prvním online generátorem který mi přišel pod ruku)
Takže raději pro jistotu. $podpis je v souboru ca.cer.pem a konkrétně
00:cd:8d:c9:1c:79:aa:2c:14:88:cb:b1:2f:24:36:
27:dd:07:d7:95:da:9f:fb:2e:37:46:6c:c1:28:af:
41:13:a2:97:1a:f6:20:9b:25:f8:f0:27:87:37:4d:
18:c5:c8:cb:e5:ee:9b:54:45:c0:79:76:02:b1:b0:
e5:18:d5:c2:f1:83:59:32:10:ae:34:5d:39:cb:cc:
81:ec:7c:93:a8:85:58:93:18:ee:b3:12:b7:95:3a:
7e:44:20:88:5d:15:e1:3f:42:bc:2c:e7:3a:03:93:
db:51:b3:d4:66:14:d1:81:e4:e6:77:82:bc:e4:db:
a5:6f:b0:36:77:4e:f3:8b:f7:c7:3c:a2:87:4e:bb:
a1:2e:30:4d:63:ad:c2:4d:a0:5b:a1:9f:86:3a:51:
a3:bc:7b:bc:f5:ce:a9:f3:10:82:89:68:d2:36:8e:
9d:6a:0b:22:5b:50:a1:17:86:21:30:8d:81:fe:1e:
80:98:e2:8f:ad:bb:93:16:2b:c8:58:4e:61:b9:4e:
ca:ac:95:84:ed:ef:4b:b2:04:6f:e8:89:da:85:9e:
7e:68:44:36:04:4b:e0:f7:b4:44:b2:65:a4:87:e8:
49:87:13:68:81:ed:f8:5c:47:41:a3:0b:86:6b:21:
c0:98:21:e2:1c:e3:8c:0c:27:1e:3e:d3:8c:b4:a5:
09:b9
Co se týče toho posledního parametru, vážně vždycky vyhodí chybu co
jsem psal. Pokud ho odstaním funkce funguje. Nedalo by se to jednoduše
vyřešit takto?
openssl_sign($retezec, $podpis, $pk);
$podpis = hash('sha256',$podpis)
$podpis = base64_encode($podpis);
Obecně je nutné aby se RSA klíč přiřazoval přímo nebo na něm nezáleží a můžu si vygenerovat jaký chci. Jediné co jsem dohledal je, že by měl mít 2048 bit.
Jo a s tím SHA256 je to opravdu verzí PHP
These constants were added in 5.4.8.
OPENSSL_ALGO_RMD160, OPENSSL_ALGO_SHA224, OPENSSL_ALGO_SHA256,
OPENSSL_ALGO_SHA384, OPENSSL_ALGO_SHA512
V případě, že chceš podepsat svůj řetězec podpis tvého souboru tě nemusí moc zajímat protože potřebuješ udělat podpis nový pro ten řetězec takže $podpis na začátku necháš prázdný a potom si z něj přečteš hotový podpis pro tvůj řetězec.
udělal sem malý experiment poslední parametr "SHA256" způsobuje problém
u verzí PHP nižších než PHP 5.2 pokud požíváš PHP nižší než 5.2 tak
pokud nemáš vážný důvod pro zachování této verze uděláš nejlíp
když si ho aktualizuješ momentálně je nejnovější PHP 7,ale pokud necheš
zas tak velký skok tak asi PHP 5.4 nebo PHP 5.6 to sou docela dobré verze. (o
zpětnou kompatibilitu se nemusíš bát ta je téměř 100% a málo kdy na
nějaký problém narazíš. třeba v PHP 7 třeba už nefungují ovladače
databáze mysql_* ale ty už by se dávno neměli používat a tak. nové verze
zrychlují a přidávají novou funkčnost).
co se tvého řešení týče
openssl_sign($retezec, $podpis, $pk);
//ano skutečně funguje vyhodí ti binární podpis, ale v jaké podobě sem nenašel (možná sha1)
$podpis = hash('sha256',$podpis)
//tímto vytvoříš nedefinovatelný sha256, který má ale uplně jinou hodnotu než při použití parametru "SHA256"
$podpis = base64_encode($podpis);
//tato funkce je použitá pro převod z binárního řetězce na textový, funkce hash() už textový řetězec vrací..
Ne není nutné přiřazovat klíč. Pomocí funkce openssl_pkey_new() si
můžeš na základě zadaných parametrů vygenerovat dvojici Private_KEY a
Public_KEY kdykoliv potřebuješ.
může mít hodnoty 512(málo), 1024(slabší standart), 2048 a 4096.
Pokud si budeš takhle generovat nové klíče, všechny ostatní soubory pak
nebudeš potřebovat. ovšem je otázka jestli to nebude vadit? Protože tvůj
certifikát je ověřován a podepsán důvěryhodnou autoritou jejíž
certifikát má uživatel někde nainstalovaný čímž uživateluv PC ověří
pravost tvého cerifikátu a pomocí Public key který je v tvém certifikátu,
který si nainstaluje ověřuje pravost tvých podpisů u souborů co mu
posíláš. (jestli to nějak pochopitelně vysvětluji)
A nebo bez certifikátů musíš uživateli nějak doručit i tvůj Pubilc key
protože tvůj podpis je moc hezký ale pokud nemá uživatel jak ověřit jeho
pravost je celkem k ničemu.(tohle druhé je např. ten případ když si to
budeš gerovat sám)
než sem to všechno ozkoušel a sepsal už si si to našel sám koukám
Verzi PHP bych neřešil je to komplikovanější. Přesunul jsem to na localhost.
Pokud se parametr nevyplní opravdu to defaultně doplní sha1. Koukám, že
jsem tu funkci chápal špatně. Vkládám tedy řetězec který chci podepsat,
prázdnou proměnou do které se mi podpis vloží, private key (který si
vygeneruji), a algoritmus. Ověřovat pravost právě musím. Proto sem z toho
teď zmatenej. Jak dochází k tomu ověření, kam zmizely všechny
certifikáty když nic z toho nepoužívám?
Edit: Private key mu posílám společně s ostatními údaji.
Jinak sem docela otravnej takže pokud by si věděl o nějakém českém zdroji kde to můžu nastudovat tak mi ho prosím pošli. Já nic kloudnýho nenašel.
Psal sem pokud je to možné
Ano přesně tak funguje.
Certifikát by ti byl dobrý pokud by obsahoval i private key ale ty máš
"veřejný" certifikát který se dává uživatelům a skrz něj ověřují
pravost tvých podpisů atd. a ano je možnost je opravdu vypustit a fungovat i bez něj. akorát
je potřeba dávat trochu víc pozor aby vřejný klíč který nějakým
způsobem předáváš uživateli nikdo nepodvrhl.
!! Private key nikomu nedávaš ten si schováš někam tajně !!
Napíšu ti jednoduchý příklad, na ověření předpokládejme, že jak klient tak server jsou v PHP a používáš certifikát (princip je většinou dost podobný všude)
<?php /* klient */
//načtení dat ze serveru
$url = "http://www.tvujserver.com/rozhrani.php";
$url = urlencode($url);
$nacteni = file_get_contents($url)
$data = json_decode($nacteni);
//přiřazení hodnot
$podepsanytext = $data->{'data'};
$podpis = $data->{'signature'};
//Načtení veřejného klíče z lokálně uloženého certifikátu (tohle mužeš použit to tvůj certifikát obsahuje)
$pub_key_id = openssl_pkey_get_public("file://path/to/file/ca.cer.pem");
//ověření pravosti
$ok = openssl_verify($podepsanytext, $podpis, $pub_key_id);
if($ok = 1) { echo ("Podpis je v pořádku"); }
else if ($ok = 0) { echo ("Podpis neodpovídá textu, pravděpodobně se jedná o podvržená data"); }
else { echo ("ověření pravsti selhalo"); }
<?php /* server */
$retezec;
//some code... & set value $retezec
$podpis = '';
$pk = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
// RSA PRIVATE KEY který musí být dvojicí s veřejným klíčem který má u sebe klient - je možné ho i načítat ze souboru ale na to máš špatné soubory
-----END RSA PRIVATE KEY-----
EOD;
openssl_sign($retezec, $podpis, $pk, "SHA256");
$output = array (
'data' => $retezec,
'signature' => base64_encode($podpis)
);
$json = json_encode($output);
echo $json;
ono s těmi certifikáty je to bezpečnější a snad je to nějak srozumitelně
napsané
Díky moc, řekněme, že už to tak nějak chápu. Narazil jsem ještě na jednu věc v dokumentaci.
Certifikát i s privátním klíčem je publikován ve formátu PKCS#12/PFX,
heslo 'eet', soubor
01000004.p12
Pracoval jsi někdy s tímto formátem? Jak z toho ty údaje mám dostat?
Tak jo pomocí funkce openssl_pkcs12_read() dostanu ze souborů .p12 jak PK tak certifikát. Tím se dostáváme zas o kus dál
Díky moc, tohle téma je vyřešený. Ještě bych ale doplnil jednu věc co
mi není jasná. Mám teď z podpisu udělat hash sha1.
Dekóduju si tedy zpět - $podpis = base64_decode($podpis)
zaheshuju - $podpis = sha1($podpis)
a následně mám $podpis hexadecimálně zakódovat, na to jsem si našel
funkci chunk_split($podpis,aktuální kódování,16) Problém mám v tom, že
nevím co zadat do druhého parametru. Jak zjistím jaké mám aktuální
kódování? Nebo jaké má kódování řetězec po zaheshování sha1.
Promin za kratší odpověď sem na telefonu aktuální kódování zpravidla odpovídá kódování souboru php, vhodným řešením je pomocí funkce mb_internal_encoding() nastavit kódování pro používané interní "stringy" a pak budeš mít jistotu jaké kódování se uvnitř používá takže i jaké nastavit do této funkce
Tohle je další věc v které mám trochu zmatek ale nejsou to 2 různé věci? Možná jsem to neměl pojmenovat jako kódování ale soustava. Potřebuji převést řetězec do 16kové soustavy a k tomu potřebuji znát aktuální soustavu.
Podařilo se mi to tak nějak dát dohromady. Momentálně volám SOAP funkci která mi vrací odpověď. Ale vypisuji to pouze takto:
$result = $client->OdeslaniTrzby($param);
print_r($result);
Asi to není úplně správné řešení, nemá se například volat nějaká
funkce která se při odpovědi vrací?
Podle specifikace by se měla odpověď vracet jako XML. Pokud je to tak jak si
myslím, jak zjistím kterou funkci vrací. Pokud je to jinak tak prosím o
vysvětlení.
Díky
Ahoj Maxy_obr
taky začínám řešit stejný problém. Potřebuji si na svém eshopu zprovoznit záležitosti kolem eet. Nejsem úplně zběhlý v tom, co po nás chtějí s těmi certifikáty a šifrováním...
Mohu Tě poprosit o nějaký funkční kód, který bych mohl použít?
Děkuji.
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==";
Ahoj, nemám teď moc čas se na to kouknout. Ale zarazila mě jedna věc. Tobě funguje funkce openssl_sign s parametrem SHA256 na php 5.2? Podle specifikace by to mělo být až od verze 5.4 viz http://php.net/…re-algos.php
No právě, že nefunguje...
Mám tam pod tím tohle:
$podpis = hash('SHA256',$podpis);
Obávám se toho, že budu muset celý systém předělat na PHP 5.4, z čehož úplně nejásám...
A hledám řešení pro PHP 5.2
Chápu, že nemáš čas, ale pokud by sis cokoliv vyšetřil, moc by mi to
pomohlo...
Děkuji
Tušil jsem, že mi to řekneš no nic... už dávám dohromady přesun na PHP 5.4..
ty jsi asi také přecházel z PHP 5.2 nebo tak něco.... máš nějaké
informace, na co si eventuálně dát pozor? nějaké háčky a tak...
děkuji
Chápu
doufám, že to nebudu muset posouvat na ještě vyšší PHP
čas ukáže.. v pátek večer to budu zřejmě přesouvat a pak se pustím do dalšího...
to eet děláš pro sebe nebo pro někoho?
Ahoj všichni,
upravil jsem Váš kód
// funkce, která nám vytvoří podpis
openssl_sign($retezec, $podpis, $pk, "SHA256");
// >>>>> $podpis = hash('SHA256',$podpis);
$podpis = base64_encode($podpis);
a dostal jsem se k PKP na konci zdrojáku.
"D84gY6R....zQj7KFKw0g==
ale jestli je opravdu ten správný....
moje PHP je 5.4.6
Ahoj, doplnil jsem kód od výpočet BKP.
Ještě kdyby to šlo to šifrování vymyslet v delphi...
díky za nakopnutí.
<?php
$cert_info = array();
if (! $cert_store = file_get_contents ( "C:\_F\Programes\_XE8_FMX\TestKryptovani/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'];
//**print_r ($pk);
//echo hash('SHA256',$retezec);
//$retezec = hash('SHA256',$retezec);
// funkce, která nám vytvoří podpis
openssl_sign($retezec, $rsa_text, $pk,OPENSSL_ALGO_SHA256); // "SHA256");
echo '1. po openssl_sign<br>';
echo $rsa_text.'<br>';
$rsa_text_base64 = base64_encode($rsa_text);
echo '2. po base64_encode = PKP <br>';
echo $rsa_text_base64.'<br>';
$hash_sha1_base16 = sha1($rsa_text);
//$hash_sha1_base16 = hash('SHA1',$rsa_text); //stejný výsledek
echo '3. po SHA1 <br>';
echo $hash_sha1_base16.'<br>';
$hash_sha1_base16 = chunk_split($hash_sha1_base16,8);
echo '4. po pomlčkách = BKP <br>';
echo $hash_sha1_base16.'<br>';
?>
výsledky odpovídají vzorové zprávě
zatím
Ahoj Honzo
skvělý, že ses přidal... půjde nám to určitě lépe
já jsem právě zjistil, že celý problém proč mi to nejde je v tom, že
mám PHP 5.2 a to neumí SHA256..
Takže dneska večer přecházím na PHP 5.4 a doufám, že už pak bude vše ok... jen doufám, že nebudu muset moc věcí opravovat.... uvidíme...
Další věc pak bude sestavit hlavičku a SOAP obálku...
kdyby jsi něco měl, budu rád, když to poskytneš, abychom mohli pokročit
(ale k tomu jsem se ještě nedostal..)
Díky moc za tvůj příspěvek!
Ahoj všichni
tak včera jsme přemigrovali na PHP 5.5 tento víkend bude asi pracovní
každopádně, funkce hash začala fungovat a zde je můj kód:
$cert_info = array();
//if (! $cert_store = file_get_contents ( "C:\_F\Programes\_XE8_FMX\TestKryptovani/01000003.p12" )) {
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;
}
echo "<br><br>";
echo "<br><br>";
echo "<br><br>";
// ř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, OPENSSL_ALGO_SHA256);
$podpis = base64_encode($podpis);
echo "Generovaný PKP:<br />";
echo $podpis;
echo "<br><br>";
echo strlen($podpis);
echo " / správné číslo je 344 znaků";
echo "<br><br>";
echo "<br><br>";
echo "<br><br>";
echo "Správný PKP:<br />";
echo "D84gY6RlfUi8dWdhL1zn0LE0s+aqLohtIxY0y88GoG5Ak8pBEH3/Ff2aFW7H6fvRxDMKsvM/VIYtUQxoDEctVGMSU/JDf9Vd0eQwgfLm683p316Sa4BUnVrIsHzwMyYkjpn66I072G2AvOUP4X5UiIYtHTwyMVyp+N/zzay3D7Q619ylDb6puN2iIlLsu+GNSB9DvsQbiLXPH6iK0R9FpR15v2y+0Uhh8NNJKl7O8Us9jbgokrA9gze+erQbhmwTm2nn2+7JGrPDqhyhwWZNLUziGSbC99wJpkEnIs0das/4hFNE3DnLvv4MsXwWCLOUZty6t6DAijlCzQj7KFKw0g==";
echo "<br><br>";
echo strlen("D84gY6RlfUi8dWdhL1zn0LE0s+aqLohtIxY0y88GoG5Ak8pBEH3/Ff2aFW7H6fvRxDMKsvM/VIYtUQxoDEctVGMSU/JDf9Vd0eQwgfLm683p316Sa4BUnVrIsHzwMyYkjpn66I072G2AvOUP4X5UiIYtHTwyMVyp+N/zzay3D7Q619ylDb6puN2iIlLsu+GNSB9DvsQbiLXPH6iK0R9FpR15v2y+0Uhh8NNJKl7O8Us9jbgokrA9gze+erQbhmwTm2nn2+7JGrPDqhyhwWZNLUziGSbC99wJpkEnIs0das/4hFNE3DnLvv4MsXwWCLOUZty6t6DAijlCzQj7KFKw0g==");
echo " / správné číslo je 344 znaků";
echo "<br><br>";
$rsa_text = $podpis;
echo '1. po openssl_sign<br>';
echo $rsa_text.'<br>';
$rsa_text_base64 = base64_encode($rsa_text);
echo '2. po base64_encode = PKP <br>';
echo $rsa_text_base64.'<br>';
$hash_sha1_base16 = sha1($rsa_text);
//$hash_sha1_base16 = hash('SHA1',$rsa_text); //stejný výsledek
echo '3. po SHA1 <br>';
echo $hash_sha1_base16.'<br>';
$hash_sha1_base16 = chunk_split($hash_sha1_base16,8);
echo '4. po pomlčkách = BKP <br>';
echo $hash_sha1_base16.'<br>';
echo "<br><br> správně:<br> 8F8ABFEB-B76E7064-343A1460-6C6E6D86-B0F99C24 <br><br>";
$podpis = strtoupper(chunk_split(sha1(base64_decode($podpis)),8,"-"));
echo $podpis;
Honzo, co jsem zkoušel ten BKP dle tvého vzoru, tak to vycházelo jinak než je ve vzorové zprávě...
můj by měl být v pořádku i s pomlčkami...
Ahoj,
jasné nedal jsem tam pomlčky, a pak velikost "hexa písmenek", v manuálu ale
není ani zmínka zda mají být malá nebo velká. Ale vzor je vzor...
Ahoj Honzo,
tobě to BKP vyšlo 8F8ABFEB-B76E7064-343A1460-6C6E6D86-B0F99C24?
Co ty Honzo, nějak jsi pokročil s hlavičkou či obálkou?
Marně se snažím rozchodit SOAP request, který by mi vrátil XML včetně hlavičky. Nedaří se mi. Prosím o radu. Děkuji
Odkaz na kód:
Snad nepíšu pozdě ale ta funkce ti nevrátí hlavičku pouze tělo. Nevím zda tam toho není víc ale určitě máš chybu u bkp tam má být base16 ne 64
Nepíšeš pozdě, zatím jsem to odložil, protože nevím co dál...
Ty máš funkci nebo již hotový kód, který Ti vrátí hlavičku?
Tu hlavičku ti to nebude vracet nikdy, jde to snad jen pomocí nějakejch prográmků ale nevím já je nepoužíval. Tohle už ti ale nějaký výsledek vracet musí ne? Ještě koukám, ten var_dump co máš na konci vyhodí chybu zakomentuj ho.
Nevím co máš na mysli prográmky... ale musí na to být nějaká knihovna, která to umí... nic externího...
Ty jsi to už nějak vyřešil?
Zobrazeno 50 zpráv z 50.