Új hozzászólás Aktív témák
-
nevemfel
senior tag
Illetve szűz Windowsra azt hiszem ezt is fel kell telepíteni:
Rally against apathy draws small crowd
-
nevemfel
senior tag
válasz cinemazealot #38 üzenetére
Jó, hát egy szűz gépre szűz kéznek sok mindent fel kell tennie, mielőtt akár egy Hello World! is futásképessé válik.
Végülis olyan sok mindent nem kell csinálni. Lehúztam a legfrissebb php.zip-et a linkelt oldalról, kicsomagoltam, és mellémentettem a totp kódot. Még a php.ini-vel sem kellett babrálni.Base2n-nél viszont én nem szöszöltem. Letöltöttem a Base2n.php-t (csak azt , semmi mást), bemásoltam a szkriptem mellé, oszt jóccakát.
Persze, világos, és is ezt csináltam, és remekül működik! De ami nekünk triviális, az mások számára nem feltétlenül az, mint azt láthatod.
Egyébként köszönöm, hasznos tanulóprogram!
Rally against apathy draws small crowd
-
-
nevemfel
senior tag
válasz cinemazealot #36 üzenetére
Nem kell hozzá semmilyen módosítás, akár saját, akár linkelt base32 dekódert használsz.
Úgy értem szem előtt tartva azt, aki kezdőként egyszerűen futtatni akarja a leírt programot, nem ért a PHP-hoz, sőt, azt sem tudja, hogy mi az. [link]
A PHP futtatókörnyezetet persze le kell tölteni, kicsomagolni, ezt megkerülni nem lehet, de ezen kívül mást ne kelljen csinálnia (base2n letöltés, a totp.php mellé kicsomagolni a base2n classt, vagy composert telepíteni, azzal lehúzni, satöbbi, satöbbi)
[ Szerkesztve ]
Rally against apathy draws small crowd
-
"Elvileg javascript-ben is meg lehetne csinálni egy helyben futtatható verziót, ahhoz a böngészőn kívül nem kellene más."
Nagyjából bármelyik nyelven meg lehet csinálni, a totp.app pedig éppen a JS implementációra egy kiváló példa (az egész üzleti logika JS-ben van megírva, a HTML alap csak a betöltéshez, a CSS pedig a látványhoz kell). Attól azonban nem feltétlenül csökken a faktor szám, ha nem ugyanabban a böngészőben fut a generátor és az Ügyfélkapu+.
#34 ekkold
Olvass tovább, nevemfel kolléga pont a helyi gépen való PHP futtatásra írt egy példát. Mellesleg én is így futtattam fejlesztés közben: parancssorból, nem böngészőből.#35 nevemfel
Nem kell hozzá semmilyen módosítás, akár saját, akár linkelt base32 dekódert használsz. Én egészen konkrétan ezt a programot futtattam parancssorból. Igaz, nem Windows alól portable PHP-val, hanem Linux alól telepítettel.[ Szerkesztve ]
-
nevemfel
senior tag
válasz cinemazealot #29 üzenetére
- egy kellően biztonságos webtárhely, ami PHP futtatásra alkalmas,
- egy domain, amin keresztül eléred a fenti webtárhelyen futó programot.Még nem próbáltam ki a programot, de kis módosításokkal (pl. saját base32 függvénnyel) elvileg annyi is elég, ha valaki letölti a PHP-t ( [link] ), kibontja a zipet, és parancssorból futtatja a scriptet.
Rally against apathy draws small crowd
-
ekkold
őstag
válasz cinemazealot #32 üzenetére
Igazából ennek akkor van értelme, ha van tárhelyed valahol (ahol php-t is futtathatsz), vagy ha van saját NAS-od, vagy szervered. Ha otthon egy sima PC-n akarnám használni, akkor egy javascript verzió lenne az ügyesebb.
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
ekkold
őstag
válasz Geri Bátyó #31 üzenetére
Elvileg javascript-ben is meg lehetne csinálni egy helyben futtatható verziót, ahhoz a böngészőn kívül nem kellene más. Viszont ezzel a kétfaktoros azonosítás gyakorlatilag az egyfaktorossal azonos biztonsági szinte süllyed. Ettől függetlenül nem vetem el a dolgot, (lehet, hogy megcsinálom) mert még mindig jobbnak érzem mint mondjuk egy totp.app használatát. Meg egy ilyet bárki tudna használni...
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
válasz Geri Bátyó #31 üzenetére
A "nulla tudás" csak Rajtad múlik, a net pedig tele van tutorialokkal. Viszont a cucc működhet saját gépről is, helyben, de akkor csak abban az esetben tudod távolról elérni, ha neten nyitsz neki egy portot az otthoni routereden és foglalsz hozzá egy az otthoni IP címedet követő dinamikus domaint, hogy "hazatalálj".
-
Geri Bátyó
addikt
válasz cinemazealot #29 üzenetére
+ ekkold
Szóval az én nulla tudásommal ez nem igazán fog működni, még lokálisan sem. Kár, pedig vicces lett volna egy saját gépemen futó kódgenerátor!"Ki a büdös istennyila vagy te bohócképű!?" SzŐr Geri, birodalmi poéta és főszakács (:L topic)
-
ekkold
őstag
válasz Geri Bátyó #28 üzenetére
Ez nem egy kész megoldás, csak a lényeg, mindenféle körítés nélkül. Tehát kell egy minimális webprogramozói ismeret ahhoz, hogy fel tudd használni.
Lennének ötleteim, hogyan lehetne viszonyleg egyszerűen többfelhasználós weboldalt csinálni ehhez. Tehát mondjuk minden felhasználónak lenne egy név/jelszó párosa, amit ha megad akkor látja az aktuális idő alapú kulcsot, ill. fel tudja venni/módosíthatja a fő kulcsot. Csak ezt több idő lenne megvalósítani, és nem biztos, hogy ennyi energiát/időt rá akarok szánni erre. A sajátom, amire készült azt már tudja, napi használatban van.http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
válasz Geri Bátyó #28 üzenetére
Fontos hangsúlyozni, hogy a program csak a működési elvre fókuszál és nulla védelemmel van ellátva (hozzáférési jelszó, kulcs elszeparált/titkosított tárolása stb.). De ha nagyon le akarom egyszerűsíteni a dolgot, akkor az alábbiakkal már összehozhatod a saját TOTP kliensedet:
- egy kellően biztonságos webtárhely, ami PHP futtatásra alkalmas,
- egy domain, amin keresztül eléred a fenti webtárhelyen futó programot.Bárhol (bármilyen eszközön) is hívod meg a szolgáltatást, az kiköpi Neked az éppen aktuális 6 számjegyű kódodat. Ennyi.
-
Geri Bátyó
addikt
válasz cinemazealot #19 üzenetére
Nyugodtan vedd szó szerint a felhasználó meghatározást. Hardverhez értek, de a szoftverhez nem. Azt sem tudom, hogy mi az a PHP!
"Ki a büdös istennyila vagy te bohócképű!?" SzŐr Geri, birodalmi poéta és főszakács (:L topic)
-
És íme egy saját "minimál" base32 dekóder, levezetés gyanánt:
function base32_decode(string $text)
{
$abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
$i = 0;
$l = strlen($text = trim(strtoupper($text)));
$result = '';
$fivebyte = 0;
while ($i < $l) {
$f = $i % 8;
if ($text[$i] == '=') break;
$p = strpos($abc, $text[$i]);
if ($p === false) throw new \Exception('Illegal base32 character: ' . $text[$i]);
$fivebyte |= ($p << (35 - $f * 5));
if ($f == 7) {
$result .= str_pad(dechex($fivebyte), 10, '0', STR_PAD_LEFT);
$fivebyte = 0;
}
$i++;
}
if ($text[$i] == '=') {
$result .= substr(str_pad(dechex($fivebyte), 10, '0', STR_PAD_LEFT), 0, $i % 8);
}
return hex2bin($result);
}Forrás RFC 4648. Most pedig szunya!
-
Inhouse
őstag
válasz cinemazealot #25 üzenetére
Köszönöm. Nem mondom, hogy nem lesz még kérdésem. Ameddig eljutottam a hex2bin problémámmal, az a bejárati ajtó előtti bejáró eleje...
Üdv Inhouse
-
No, megpróbálom röviden és érthetően leírni a program működését. Hozzáértők, nyugodtan szóljatok hozzá!
<?php
// Betöltjük a Base2n nevű osztály forráskódját, ezzel elérhetővé válik a base32 kóder/dekóder szolgáltatás. Részletek lejjebb.
require_once("Base2n.php");
// Beállítjuk az időzónánkat. Erre azért van szükség, mert a TOTP szabvány UTC világórához van kötve, a mi rendszeróránk viszont CET időzóna szerint ketyeg. Ha tehát a mi óránk ma, január 27-én 20:02-t mutat, az UTC szerint 19:02. Ezt az Ügyfélkapu+ is tudja, hiszen ő is ugyanezt az algoritmust használja, nekünk pedig lehetőség szerint másodpercre pontosan együtt kell vele ketyegnünk.
date_default_timezone_set('Europe/Budapest');
// Létrehozzunk azt az objektumot, ami a base32 dekódolást fogja elvégezni. Azért így, mert a Base2n osztály egy általános felhasználású osztály, többféle kódolást is képes alkalmazni, a base32 pedig az alábbi ábécével és egyéb paraméterekkel inicializálható. De ez egy példa, ekkold kolléga már bemutatta a saját megoldását, az is tök jó.
$base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true);
// Definiálunk egy speciális, ún. "hash" függvényt, ami a paraméterként átadott kulccsal (1. paraméter) és pad bájt (2. paraméter) segítségével egy fix hosszúságú, de a tartalom függvényében jelentősen változékony tartalommal bíró bináris bájtsorrá kódolja a 3. "text" paramétert. Ez a "text" persze lehet bármilyen bináris bájtsor is, a tartalma lényegtelen.
function h(string $key, int $pad, string $text)
{
// A kulcsot 64 bájtra egészítjük ki jobbról feltöltve nullás bájtokkal.
$key = str_pad($key, 64, chr(0x00), STR_PAD_RIGHT);
// A 64 bájtra hízlalt kulcs minden bájtján XOR bitműveletet (kizáró VAGY) hajtunk végre a pad értékével, ami szintén egy bájt. Ezzel a kulcs bitjeinek eloszlását szétszórjuk a spektrumon, egyszerűbben mondva, zajosabbá tesszük.
for ($i = strlen($key) - 1; $i >= 0; $i--) {
$key[$i] = chr(ord($key[$i]) ^ $pad);
}
// A 64 bájtos, zajos kulcshoz jobbról hozzáfűzzük a titkosítandó "szövegünk" bájtjait (ami majd látjuk, hogy valójában nem is szöveg) és alávetjük az SHA-1 hash-elésnek. Az eredmény egy 20 bájt (azaz 160 bit) hosszú bináris bájtsor. (Ha a 3. paraméter false lenne true helyett, akkor az eredmény ugyanennek a 20 bájtnak a hexadecimális megfelelője volna, azaz egy 40 karakteres string.)
return hash('sha1', $key . $text, true);
}
// Lekérdezzük a rendszeridőt, ami UTC időzónában értelmezett, 1970.01.01 00:00:00 óta eltelt másodpercek száma lesz.
$t = time();
// Ezt a ~1,7 milliárdos számot elosztjuk 30-cal és csak az egész részt tartjuk meg. Ezzel egy ~57 milliós értéket fogunk kapni, ami 30 másodpercenként növeli az értékét eggyel.
$t30 = (int)floor($t / 30);
// Fogjuk ezt a 30 másodperceként lépkedő számlálót és átalakítjuk egy 8 bájtos (64 bites) big-endian egésszé. Ezt úgy csináljuk, hogy először a számot átalakítjuk hexadecimálissá, balról feltöltjük '0'-ás karakterekkel, amíg 16 karakter hosszú nem lesz, majd az egészet visszaalakítjuk egy bináris bájtsorrá, ami pont 8 bájt hosszú lesz és történetesen string típusú. De ezt elolvasni nem fogjuk tudni, bár nem is célunk.
$c = hex2bin(str_pad(dechex($t30), 16, '0', STR_PAD_LEFT));
// Közben előkapjuk az Ügyfélkapu+-tól kapott 16 karakteres kulcsunkat, ami valójában base32 eljárással van elkódolva. Az eredmény egy ~10 elemű bájtsor lesz.
$key = $base32->decode('IDEJONAZUGYFELKAPUTOLKAPOTT16JEGYUKULCSOD');
// Fogjuk a fent definiált hash függvényünket és meghívjuk a ~10 bájtos (immáron dekódolt) kulcsunkkal, egy 0x36 (54) értékű pad bájttal és a 8 bájton tárolt számlálónkkal. Ezután újra meghívjuk a ~10 bájtos kulcsunkkal, egy 0x5c (92) értékű pad bájttal és az előbbi hívásunk eredményeként kiköpött hash eredményünkkel. Az eredmény egy 20 bájtos (160 bites) bájtsor lesz.
$h = h($key, 0x5c, h($key, 0x36, $c));
// Vesszük ennek az utolsó (huszadik, azaz mivel 0-kezdetű tömbindexelést használunk, 19. indexű) elemét, ami -- mivel stringben tároljuk az hash-elésünk eredményét -- egy karakter lesz. Ahhoz, hogy ebből egy számot kapjunk át kell kergetnünk az ord() függvényen. Végül pedig, egy AND bitművelettel elmaszkolva megtartjuk az utolsó 4 bitjét. Ennek köszönhetően az eredmény egy 0...15 közötti szám lesz, amit offszetként fogunk használni.
$o = ord($h[strlen($h) - 1]) & 0x0f;
// Vesszük a hash-elésünk eredményeként született bájtsort (ami string típusú) és rábökünk annak "offszetedik" elemére. Az ord()-dal egésszé konvertáljuk, AND bitművelettel elmaszkolva megtartjuk az utolsó 7 bitjét, majd balra el-shift-eljük 24 bittel.
$r = (ord($h[$o]) & 0x7f) << 24
// Fogjuk a hash bájtsorunk "offszet+1-edik" elemét, egésszé alakítjuk és eltoljuk balra 16 bittel.
| ord($h[$o + 1]) << 16
// Fogjuk a hash bájtsorunk "offszet+2-edik" elemét, egésszé alakítjuk és eltoljuk balra 8 bittel.
| ord($h[$o + 2]) << 8
// Fogjuk a hash bájtsorunk "offszet+3-adik" elemét, egésszé alakítjuk.
| ord($h[$o + 3]);
// Ezt a 4 bájtot OR bitműveletekkel összefésüljük, így kapunk egy 31 bites egész számot, ami a 0...2147483647 tartományban kaphat majd értéket.
// Fogjuk ezt a 31 bites egészt és vesszük az egymillióval való osztás maradék részét, ami így egy legfeljebb 6 számjegyű decimális szám lesz. Annak érdekében viszont, hogy ez a szám garantáltan 6 számjegyű legyen, szöveggé alakítjuk és balról feltöltjük '0'-ás karakterekkel. És ezzel meg is van a 6 számjegyű kódunk.
echo str_pad($r % 1000000, 6, '0', STR_PAD_LEFT) . "\n";
-
"Engem az zavar a hex2bin()-ben, hogy nem értem az eredményét, miért csak (látszólag?) azt a 2 értéket alakítja át?
00|00|00|00|03|73|f2|a7 -> s�"Ezt teljesen helyesen teszi mert a webes felületek döntő többségben UTF-8 kódolással dolgoznak:
- az ASCII vezérlő karaktereket (0-31 / 00-1f) nem mutatják
- a szabványos ASCII karakterek (32-127 / 20-7f) megegyeznek
- emellett az UTF-8 szabvány nem egy single-byte codepage (mint a win1250 vagy az iso8859-2), ami azt jelenti, hogy egy karakter lehet tárolva 1, 2, 3, 4 byte-on is, de nincs minden kombinációra illeszthető karakterEmiatt:
- 00 és 03 nincs megjelenítve
- 73 --> 's'
- f2a7 --> f2 esetén a karakterhez 4 byte-ot vár, de ez itt nem teljesül, ezért itt egy úgynevezett replacement charactert helyez elA lényeg az, amit már korábban írtak, a képernyőn megjelenő forma semmit sem jelent...
-
ekkold
őstag
Bemásoltam korábban egy dekódoló függvényt, én is a netről szedtem. Teljesen jól működik, csak használni kell.
Azon kívül talán léteznek még ingyenes tárhely szolgáltatók, ahol php-t is lehet használni. Egy ilyen apphoz nagyon kevés hely is elegendő. Az ATW-n pl. most is lehet ingyen tárhelyet regisztrálni - mindjárt kipróbálom egy-e rajta...http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
Inhouse
őstag
válasz cinemazealot #19 üzenetére
Jogos, hiszen az egész erről szólt. Persze azért ehhez a visszaéléshez kéne a felhasználónév és jelszó, 30s-en belül, meg valami motiváció...de persze az ördög nem alszik és így korrekt, ha nincs 3. fél.
Csak meg kéne csináljam a sajátom a te segítségeddel. Jól sejtem, hogy készül a saját base32 függvényed?Üdv Inhouse
-
válasz Geri Bátyó #17 üzenetére
Ahhoz, hogy válaszoljak erre a kérdésre, tudnom kellene, miféle felhasználóval van dolgom.
Ha van affinitásod a PHP-hoz, akkor a kérdés nem kérdés: beüzemelsz egy gépet, amin fut a PHP, és már meg is van a saját TOTP generátorod. Az már csak hálózati konfiguráció kérdése, mivel honnan akarod vagy vagy hajlandó elérni. A bejegyzés azoknak szól elsősorban, akik kíváncsiak az utóbbi időben sokszor és sokak által tárgyalt TOTP algoritmus működésére, és/vagy szeretnének saját megoldást, ami senki mástól nem függ (sem a Google-tól, sem az MS-től, sem a TOTP.APP orosz fejlesztőjétől, de még csak a magyar államtól sem).
#18 Inhouse
Azért nem osztom a nézetedet, mert a hangsúly a saját, és mindenki mástól független megoldáson van. Az Általad leírt megoldás függ a base32 dekóder szolgáltatástól és a onecompiler.com-tól. Ráadásul a kulcsod online dekódolásával és a programod harmadik fél portálján keresztül történő futtatásával Te magad szolgáltatod ki a titkos(nak szánt) adataidat. Ne tedd! -
Inhouse
őstag
válasz Geri Bátyó #17 üzenetére
Mint egyszerű user (én)...
Ha minden telepítés nélkül kell, akkor keresel egy base32 dekódoló weboldalt, ott az azonosítódat megadva megkapod az eredeti változatát és mondjuk a onecompiler.com/php oldalra beillesztve a program forráskódját, néhány módosítás után már működik is, ezeket a sorokat "hatástalanítod" //-el az elején, vagy kitörlöd:
// require_once("Base2n.php");
// $base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true);
Ezt a sort pedig:
$key = $base32->decode('IDEJONAZUGYFELKAPUTOLKAPOTT16JEGYUKULCSOD');
módoisítod így:
$key = 'IDEJONAZUGYFELKAPUTOLKAPOTT16JEGYUKULCSODeredeti változata, ami nem base32';
Jobbra fent nagy piros RUN gomb, alatta lesz az eredmény.[ Szerkesztve ]
Üdv Inhouse
-
Geri Bátyó
addikt
Ezt egy magamfajta felhasználó hogyan tudná használni? (Ha egyáltalán)
"Ki a büdös istennyila vagy te bohócképű!?" SzŐr Geri, birodalmi poéta és főszakács (:L topic)
-
"A pontok szóközöket helyettesítenek, csak a fórummotor kiszedi őket..."
Nem szóközök, hanem nullás bájtok, amiknek nincs (olvasható) karakteres megfelelője. És nem a fórum motor, hanem a HTML "szedi ki őket", valójában pedig csak összevonja a white space-eket. A HTML alapú megjelenítés sok szempontból nem szerencsés ilyen esetben, de a hexadecimális formátum sokat tud ebben segíteni. Hasonló okból barátai a fejlesztőknek a hexa editorok.
-
Inhouse
őstag
válasz cinemazealot #14 üzenetére
Köszi! Nem az olvashatóság volt a gondom, hanem, hogy nem adott egy akármilyen karaktert a tartományon kívülről, nem voltak az elején a üres (vagy egyéb értelmezhetetlen, stb...) karakterek a 0x00-k (v. 0x03) miatt. Lepróbáltam újra és most a onecompiler oldal is úgy adja vissza, hogy vezető semmikkel és a hosszellenőrzés szerint is 8, így már érthetőbb lenne...de mi történt tegnap óta?
Tegnap is csak bemásoltam a prg-d, és amikor egy változó kapott értéket, akkor kiírattam.
De lehet, hogy saját magam vezettem meg valamiért...echo-val néztem.
Ahogy látom voltak változások a PHP verziókban ebben a függvényben is, a onecompiler meg nem írja, hogy mennyire frisset futtat. A https://www.w3schools.com/ oldal is levágja a 0x00-kat, mint tegnap még a onecompiler. Tudom, telepítsek. Ma már megtaláltam a var_dump() függvényt...
onecompiler:
var_dump(hex2bin("000000000048656c6c6f")). "\n"; -> string(10) ".....Hello"
w3schools:
var_dump(hex2bin("000000000048656c6c6f")). "\n"; -> string(10) "Hello"
A pontok szóközöket helyettesítenek, csak a fórummotor kiszedi őket...[ Szerkesztve ]
Üdv Inhouse
-
"Ez a hex2bin() meg csak párat."
Ugye nem a képernyőről próbálod leolvasni hány bájtot gyárt a függvény? Mondom, bármit is kapsz ennek kimenetéül, azt ne próbáld szövegként elolvasni!
Egyébként rém egyszerű a működése, mert a függvény hexadecimális bemenetének és bináris kimenetének hossza (bájt- vagy ha úgy tetszik, karakterszáma) között egy 2-es osztó áll: beadsz neki n (páros) számú hexadecimális karaktert string formájában és kiad n/2 számú bájtot szintén string formájában. Amit csak akkor tudsz olvasni, ha mindegyik bájt értéke a 32...127 (hexadecimálisan 0x20...0x7f) tartományban van, ami jelen esetben nagy eséllyel nincs így.
-
Inhouse
őstag
Ja, korai volt az örömöm, a bin2hex() csak visszaalakítja a korábbi hexa alakba, a hex2bin() inverze (triviális, csak elsőre nem esett le), a hexáig jó vagyok HB-ban is. Csak ott az ennek megfelelőnek vélt függvény annyi karaktert gyárt, amennyi kijön a hexa értékből. Ez a hex2bin() meg csak párat. Gyanús, hogy ez így nem lesz jó...lehet, hogy 01... olvasható formátumban kéne valahogy megnézzem a kapott értéket, mindkét platformon...
[ Szerkesztve ]
Üdv Inhouse
-
Inhouse
őstag
válasz cinemazealot #8 üzenetére
A bin2hex() ötlet jónak tűnik, majd kipróbálom. Köszi!
Nyilvánvaló, hogy egy ilyet kiírni szövegként teljességgel értelmetlen volna, mert az csak egy bájtsor...
Nem is az értékekre voltam kíváncsi, összehasonlítási alap lett volna az enyémmel, ezen hasalt itt el a dolog. Idáig sem volt olyan egyszerű, nekem a PHP 0 tudásommal, de utána néztem, és megkerestem a megfelelőjét HB-ban. UNIX time-ot nem találtam, azt pl. megírtam.
Igen, este idáig jutottam, utána írtam ide....ha igény van rá, este leírom egy hsz-ben az egész program működését sorról-sorra.
Van, van! Köszi!
Főleg, mert ezután jön az a rész, amit megint nem igazán értek még...néztem az operátorokat és a ^ jel sem volt köztük, illetve ez a többsoros ord()-os rész is ködös, de ebből itt van a Skori megoldása is, hátha...
Mindenesetre már sokat segítettél és köszönöm az elkövetkezőket is.
Rám is vár még egy Base32 függvény írása, mert az nincs HB-ban, nem találtam. Base64 van beépített, meg írtam egy sajátot is tanulásképpen.Üdv Inhouse
-
ekkold
őstag
válasz cinemazealot #4 üzenetére
Csak javaslat, de szerintem építsd be a base32 dekódoló függvényt a php fájlodba, így nem kellene külső 3. fél által gyártott kódot meghívnod.
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
válasz cinemazealot #8 üzenetére
"Mert ha jól sejtem, tegnap 18:23:30-kor futtattad."
Bocs, 18:23:30 és 18:23:59 között.
-
Még egyszer: a hex2bin() kimenete nem egy hétköznapi (olvasható) string, hanem egy (jelen pillanatban 8 karakter, azaz 8 bájt hosszú) 64 bites integer string-ként tárolva. Pusztán azért, mert így kényelmesebb vele dolgozni. Ne próbáld megfejteni "00|00|00|00|03|73|f2|a7" bájtsorozat (string) szöveges jelentését, mert nincs neki olyan. Ez nem más, mint az 57930407 értékű egész szám big-endian ábrázolása, ami a 1737912210/30 matematikai művelet eredményeként született. Mert ha jól sejtem, tegnap 18:23:30-kor futtattad.
Online szerintem ne akarj PHP-t futtatni, inkább telepíts fel egyet magadnak, futtasd a programot parancssorból és itt-ott állítsd meg, hogy "kiechózd" egyik-másik változót. Viszont kiechózni sem lehet mindent, pl. a bináris tartalom parancssorban is szarul mutatna. Ahhoz előbb érdemes beletenni a bináris tartalmat egy bin2hex()-be, csak hogy hexadecimálisan olvasható legyen.
Még egy gondolat a stringekhez: a PHP-ban minden bináris tartalom (pl. hang, kép, videó, Excel tábla, Word vagy PDF dokumentum) betölthető stringbe. Nyilvánvaló, hogy egy ilyet kiírni szövegként teljességgel értelmetlen volna, mert az csak egy bájtsor, aminek elemei bőven túlmutathatnak az ASCII kódtáblán.
Szerk.: Most melózom, de ha igény van rá, este leírom egy hsz-ben az egész program működését sorról-sorra.
[ Szerkesztve ]
-
Inhouse
őstag
válasz cinemazealot #6 üzenetére
Szia!
Köszi, hogy válaszoltál. Láttam ezeket, amiket linkeltél, de a te gyakorlati megvalósításod nagyon megtetszett és soronként szerettem volna megérteni és átültetni. De valószínűleg ez mégsem ilyen egyszerű, meghaladja az én képességeim.
Engem az zavar a hex2bin()-ben, hogy nem értem az eredményét, miért csak (látszólag?) azt a 2 értéket alakítja át?
00|00|00|00|03|73|f2|a7 -> s�
Vagy az echo nem ír ki olyat, ami nem olvasható string? De akkor miért nincs 0xA7, alias § nálam, ž netes környezetben? Csak az angol ABC és számok?
A másik problémám, hogy megnéztem a hash részt, a HB-s változat hexaban ugyanazt az eredményt adja, a RAW opcióval meg csak talán, az értelmesen olvasható ASCII része stimmel, a többit egyelőre nem tudom...lehet, hogy csak megjelenítési gond, ugyanúgy megenné és kiköpné az eredményt... az online PHP futtatós oldal ebben nem barátom.[ Szerkesztve ]
Üdv Inhouse
-
Szia Inhouse!
A hex2bin() pontosan azt teszi, amit a neve sugall, illetve amit a manual ír róla: egy bináris stringet hoz létre. Ennek azonban nem feltétele, hogy a string ember által olvasható is legyen. Ha megfigyeled, az eredménye csupán egy 64 bites (8 bájtos) "big-endian" integer, aminek alapja a 30 másodpercenkénti számláló, kiegészítve balról nulla karakterekkel (!). Mivel az alapja integer, amúgy sem lenne string formában olvasható, de nem is ez a cél, hanem hogy bekerüljön a h() függvénybe, ahol a jobbról nulla bájtokkal (!) kiegészített és aztán jól "meg-scramble-zött" kulcshoz hozzáfűzve ráeresztjük az SHA1-et... aztán mégegyszer egy másik pad bájttal.
Olvasd el a linkelt szabványt... illetve az abban hivatkozott RFC 4226 és RFC 2104 szabványokat, utóbbiban lesz jobban kifejtve ez a fenti eljárás.
-
Inhouse
őstag
Szia cinemazealot !
Engem is foglalkoztatott, hogy megcsinálom. Nem vagyok PHP programozó, a legfejlettebb nyelv a Harbour, amiben dolgozok, ez egy Clippert magában foglaló modernizált C alapú nyelv.
Gondoltam elegendő lesz, vannak fejlett szövegfeldolgozó függvények, számrendszer konvertálás, sha1, stb...
Néztem a kódod, elakadtam a hex2bin() függvénynél. Azt látom, hogy ez nem az aminek a neve mutatná, hanem a hexa adatból ASCII karakterek lesznek. De a netes példákban nem kezdődik 9 nullával, mint itt. Van egy ilyen függvény HB-ban, HB_HexToStr(), de az fogja és végigmegy, és minden pár byte-ból próbál karaktert gyártani. Ezért az őeredménye a 0x00-k miatt üresekkel kezdődik, aztán a 0x03 egy szivecske 1250-es kódkészletnél, stb...
Példa:
PHP:
000000000373f2a7 -> s�
HB:
000000000373f2a7 -> ♥sň§
Weben próbáltam https://onecompiler.com/php/-el. Miért csak a 0x73(s) és az 0xF2(ň) van látszólag benne. Gondolom a 0xF2 azért más, mert erre nincs felkészítve a webes felület megjelenítésben, vagy más a kódlap...[ Szerkesztve ]
Üdv Inhouse
-
Szuper, örülök.
#2 ekkold
Olvastam a megoldásodról, irigykedtem is, hogy megelőztél. De azon túl, hogy egy bagatell problémán akadtam fenn, én kizárólag a TOTP magjára fókuszáltam. Aztán ha valaki olyan összkomfortos megoldást akar, mint a Tiéd, az legfeljebb körülbástyázza az áhított védelmi és kényelmi funkciókkal.#3 Doky586
Nem beszélve arról a pár ezer forintos kínai switch-ről, amit a minap tettem a hálózatra. -
"Az igazsághoz persze hozzátartozik, hogy ez a program is behúz egy 3. fél által gyártott kódot, ami"...
A teljes bizonyossághoz még ellenőrizni kellene a
- windows forráskódját
- a böngésző forráskódját
- a hálókártya driver forráskódját
- minden mást is ami futhat...
Hogy teljes biztonságban legyünk. -
ekkold
őstag
Hasonlót gyártottam én is, persze jelszavas védelemmel kiegészítve.
Több kulcsot kezel, és egy táblázatban jeleníti meg, valahogy így:
Hogy ne kelljen külső dekódert használni azt is beemeltem a php kódba:
$map = array(
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 7
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23
'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31
'=' // padding char
);
$flippedMap = array(
'A'=>'0', 'B'=>'1', 'C'=>'2', 'D'=>'3', 'E'=>'4', 'F'=>'5', 'G'=>'6', 'H'=>'7',
'I'=>'8', 'J'=>'9', 'K'=>'10', 'L'=>'11', 'M'=>'12', 'N'=>'13', 'O'=>'14', 'P'=>'15',
'Q'=>'16', 'R'=>'17', 'S'=>'18', 'T'=>'19', 'U'=>'20', 'V'=>'21', 'W'=>'22', 'X'=>'23',
'Y'=>'24', 'Z'=>'25', '2'=>'26', '3'=>'27', '4'=>'28', '5'=>'29', '6'=>'30', '7'=>'31'
);
function decode($input) {
global $map;
global $flippedMap;
if(empty($input)) return;
$paddingCharCount = substr_count($input, $map[32]);
$allowedValues = array(6,4,3,1,0);
if(!in_array($paddingCharCount, $allowedValues)) return false;
for($i=0; $i<4; $i++){
if($paddingCharCount == $allowedValues[$i] &&
substr($input, -($allowedValues[$i])) != str_repeat($map[32], $allowedValues[$i])) return false;
}
$input = str_replace('=','', $input);
$input = str_split($input);
$binaryString = "";
for($i=0; $i < count($input); $i = $i+8) {
$x = "";
if(!in_array($input[$i], $map)) return false;
for($j=0; $j < 8; $j++) {
$x .= str_pad(base_convert($flippedMap[@$input[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT);
}
$eightBits = str_split($x, 8);
for($z = 0; $z < count($eightBits); $z++) {
$binaryString .= ( ($y = chr(base_convert($eightBits[$z], 2, 10))) || ord($y) == 48 ) ? $y:"";
}
}
return $binaryString;
}//fv
/*
function encode($input, $padding = true) {
global $map;
global $flippedMap;
if(empty($input)) return "";
$input = str_split($input);
$binaryString = "";
for($i = 0; $i < count($input); $i++) {
$binaryString .= str_pad(base_convert(ord($input[$i]), 10, 2), 8, '0', STR_PAD_LEFT);
}
$fiveBitBinaryArray = str_split($binaryString, 5);
$base32 = "";
$i=0;
while($i < count($fiveBitBinaryArray)) {
$base32 .= $map[base_convert(str_pad($fiveBitBinaryArray[$i], 5,'0'), 2, 10)];
$i++;
}
if($padding && ($x = strlen($binaryString) % 40) != 0) {
if($x == 8) $base32 .= str_repeat($map[32], 6);
else if($x == 16) $base32 .= str_repeat($map[32], 4);
else if($x == 24) $base32 .= str_repeat($map[32], 3);
else if($x == 32) $base32 .= $map[32];
}
return $base32;
}
*/[ Szerkesztve ]
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
PSti
tag
Tökéletesen működik, nagyon köszönöm!
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Autós topik
- A GDDR7 memóriák okozzák az új GeForce-ok magas árazását
- nVidia tulajok OFF topikja
- OLED TV topic
- Új design és okosabb AI: megjött a Galaxy S25 készülékcsalád
- Mibe tegyem a megtakarításaimat?
- Star Trek Online -=MMORPG=-
- Házimozi belépő szinten
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Philips LCD és LED TV-k
- További aktív témák...
Állásajánlatok
Cég: Marketing Budget
Város: Budapest