Bylo oznámeno vydání nové verze 8.1 "Hoare" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Doprovodný příspěvek na blogu Khronosu rozebírá kódování a dekódování videa pomocí Vulkan Compute Shaders v FFmpeg.
Byl představen open-source a open-hardware prototyp nízkonákladového raketometu kategorie MANPADS, který byl sestaven z běžně dostupné elektroniky a komponent vytištěných na 3D tiskárně. Raketa využívá skládací stabilizační křidélka a canardovou stabilizaci aktivně řízenou palubním letovým počítačem ESP32, vybaveným inerciální měřicí jednotkou MPU6050 (gyroskop a akcelerometr). Přenosné odpalovací zařízení obsahuje GPS,
… více »Vědci z univerzity La Sapienza v Římě vyvinuli systém, který dokáže identifikovat jednotlivce pouze na základě toho, jak narušují signály Wi-Fi. Autoři tuto novou technologii nazvali WhoFi. Na rozdíl od tradičních biometrických systémů, jako jsou skenery otisků prstů a rozpoznávání obličeje, nevyžaduje tato metoda přímý fyzický kontakt ani vizuální vstupy. WhoFi může také sledovat jednotlivce na větší ploše než kamera s pevnou polohou; stačí, je-li k dispozici Wi-Fi síť.
SuperTux (Wikipedie), tj. klasická 2D plošinovka inspirovaná sérií Super Mario, byl vydán v nové verzi 0.7.0. Videoukázka na YouTube. Hrát lze i ve webovém prohlížeči.
Ageless Linux je linuxová distribuce vytvořená jako politický protest proti kalifornskému zákonu o věkovém ověřování uživatelů na úrovni OS (AB 1043). Kromě běžného instalačního obrazu je k dispozici i konverzní skript, který kompatibilní systém označí za Ageless Linux a levné jednodeskové počítače v ceně 12$ s předinstalovaným Ageless Linuxem, které se chystají autoři projektu dávat dětem. Ageless Linux je registrován jako operační
… více »PimpMyGRC upravuje vzhled toolkitu GNU Radio a přidává alternativní barevná témata. Primárním cílem autora bylo pouze vytvořit tmavé prostředí vhodné pro noční práci, nicméně k dispozici je nakonec celá škála barevných schémat včetně možností různých animací a vizuálních efektů (plameny, matrix, bubliny...), které nepochybně posunou uživatelský zážitek na zcela jinou úroveň. Témata jsou skripty v jazyce Python, které nahrazují
… více »GIMP 3.2 byl oficiálně vydán (Mastodon, 𝕏). Přehled novinek v poznámkách k vydání.
FRANK OS je open-source operační systém pro mikrokontrolér RP2350 (s FRANK M2 board) postavený na FreeRTOS, který přetváří tento levný čip na plně funkční počítač s desktopovým uživatelským rozhraním ve stylu Windows 95 se správcem oken, terminálem, prohlížečem souborů a knihovnou aplikací, ovládaný PS/2 myší a klávesnicí, s DVI video výstupem. Otázkou zůstává, zda by 520 KB SRAM stačilo každému 😅.
Administrativa amerického prezidenta Donalda Trumpa by měla dostat zhruba deset miliard dolarů (asi 214 miliard Kč) za zprostředkování dohody o převzetí kontroly nad aktivitami sociální sítě TikTok ve Spojených státech.
Projekt Debian aktualizoval obrazy stabilní větve „Trixie“ (13.4). Shrnuje opravy za poslední dva měsíce, 111 aktualizovaných balíčků a 67 bezpečnostních hlášení. Opravy se týkají mj. chyb v glibc nebo webovém serveru Apache.
vstupní: _U9..vnIfeJymPPkVwPU výstupní: _UbD.ypiMD0vwV čem je problém?
Řešení dotazu:
<?php
$password = crypt('mypassword'); // let the salt be automatically generated
/* You should pass the entire results of crypt() as the salt for comparing a
password, to avoid problems when different hashing algorithms are used. (As
it says above, standard DES-based password hashing uses a 2-character salt,
but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
Pokud funkcí crypt vygeneruju jakýkoliv hash kromě extended-des tak se to dá takto ověřit. Pro extended-des to nefunguje:
$password = crypt('retezec', '_U9..dCaX');
(crypt('retezec', $password) == $password) : toto je vždy FALSE
debian/patches/php_crypt_revamped.patch a copak nevidím v ext/standard/crypt.c:
if (salt[0]=='$' && salt[1]=='1' && salt[2]=='$') {
/* CRYPT_MD5 */
#if PHP_MD5_CRYPT
# warning Using system MD5 crypt function, which is OK on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# error Using PHP MD5 crypt function, should not happen on Debian system
crypt_res = php_md5_crypt_r(str, salt, output);
#endif
} else if (salt[0]=='$' && salt[1]=='6' && salt[2]=='$') {
/* CRYPT_SHA512 */
#if PHP_SHA512_CRYPT
# warning Using system SHA512 crypt function, which is OK on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# error Using PHP SHA512 crypt function, should not happen on Debian system
crypt_res = php_sha512_crypt_r(str, salt, output, sizeof(output));
#endif
} else if (salt[0]=='$' && salt[1]=='5' && salt[2]=='$') {
/* CRYPT_SHA256 */
#if PHP_SHA256_CRYPT
# warning Using system SHA256 crypt function, which is OK on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# error Using PHP SHA256 crypt function, should not happen on Debian system
crypt_res = php_sha256_crypt_r(str, salt, output, sizeof(output));
#endif
} else if (
salt[0] == '$' &&
salt[1] == '2' &&
salt[2] == 'a' &&
salt[3] == '$' &&
salt[6] == '$' &&
((salt[4] == '0' &&
salt[5] >= '4' && salt[5] <= '9') ||
(salt[4] >= '1' && salt[4] <= '2' &&
salt[5] >= '0' && salt[5] <= '9') ||
(salt[4] == '3' &&
salt[5] >= '0' && salt[5] <= '1'))) {
/* CRYPT_BLOWFISH */
#if PHP_BLOWFISH_CRYPT
# error Using system BlowFish crypt function, should not happen on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# warning Using PHP BlowFish crypt function, which is OK on Debian system
crypt_res = php_crypt_blowfish_rn(str, salt, output, sizeof(output));
#endif
} else if (salt[0]=='_' &&
salt_len == 9) {
/* CRYPT_EXT_DES */
#if PHP_EXT_DES_CRYPT
# error Using system extended DES crypt function, should not happen on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# warning Using PHP extended DES crypt function, which is OK on Debian system
_crypt_extended_init_r();
crypt_res = _crypt_extended_r(str, salt, &extended_buffer);
#endif
} else {
/* CRYPT_STD_DES */
#if PHP_STD_DES_CRYPT
# warning Using system standard DES crypt function, which is OK on Debian system
# if PHP_USE_SYSTEM_CRYPT_R
crypt_res = crypt_r(str, salt, &buffer);
# else
crypt_res = crypt(str, salt);
# endif
#elif PHP_USE_PHP_CRYPT_R
# error Using PHP standard DES crypt function, should not happen on Debian system
_crypt_extended_init_r();
crypt_res = _crypt_extended_r(str, salt, &extended_buffer);
#endif
}
Jak je na první pohled jasné, zatímco u standardního DES a u saltů s dolary to funguje, i když je samotný hash součástí saltu, tak zrovna u extended DES se testuje, zda je délka hashe přesně 9. Pokud je 9, zavolá se funkce _crypt_extended_r, která extended DES umí. No a pokud není délka 9, použije se postup pro standardní DES - což je právě volání systémového crypt, který extended DES neumí. (To, že se to volá přesně takto, jsem si ověřil debuggerem.)
V upstream zdrojovych kodech PHP je tato část jinak - tam by ext des nejspíš buď fungovalo, nebo nefungovalo vůbec :).
Jako oprava by stačilo odstranění salt_len == 9 - v saltu standardního DESu by podtržítko být nemělo, takže standardní DES se od extended pozná i tak.
Není mi moc jasné, kde přesně se ty patche berou, tak nevím, komu můžeš poděkovat - zda maintainerům Debianu, nebo PHP.
Tiskni
Sdílej: