Hlavní navigace

Názor ke zprávičce Velmi rychlá kryptografická hašovací funkce BLAKE3 vyšla ve verzi 1.0.0 od Filip Jirsák - Ak by ste si ten clanok precital sam...

  • 30. 7. 2021 21:26

    Filip Jirsák

    Ak by ste si ten clanok precital sam tak sa dozviete ze veta It also excludes functions that depend on the memory address of the object being hashed in cases that the address may change during execution (as may happen on systems that use certain methods of garbage collection), although sometimes rehashing of the item is possible. funkciu Object.hashCode vylucuje ako hash funkciu.
    Nevylučuje. Doporučuji nastudovat význam slov „in cases that“, „may“.

    Ludia ktori sa v problematike orientuju, napr. ochrana osobnych udajov o tom nieco vedia. Jediny pripad ked sa vam moze v doselosti zmenit RC je zmena pohlavia. To ale neznamena ze to povodne RC sa recykluje. Stale vas identifikuje ako osobu v case pred zakrokom.
    Vy máte smůlu, zase jste to netrefil. Lidé řešící ochranu osobních údajů jednoznačnou identifikaci osob vůbec řešit nemusí. Řešit ji musí třeba sociálka, protože byste asi nechtěl při odchodu do důchodu zjistit, že nemáte na žádný důchod nárok, protože jste pod novým rodným číslem odpracoval málo let a staré rodné číslo byl přece někdo jiný.
    Původní rodné číslo se opravdu nerecykluje. Ovšem nové rodné číslo mpůžete dostat i v jiných případech, než je změna pohlaví. Například když se ukáže, že staré rodné číslo je špatně – např. má špatnou kontrolní číslici nebo je duplicitní.

    Ktore udaje je mozne od clovaka zistit, bez toho aby nonstop so sebou nosil rodny list a su dostatocne pre jednoznacnu identifikaciu osoby?
    Třeba otisk prstu. Ale to je trochu nepraktické. Pokud myslíte údaje, které mohou být někde napsané, tak v ČR bohužel takový údaj, který by měli všichni, nemáme. Mohli jsme takový údaj mít jako náhradu rodného čísla, ale Ministerstvo vnitra řeklo „ne“.

    Vy ste stale presvedceny o tom ze referencia na objekt je nemenna?
    Dobře, trváte na tom, že se musíte znemožnit pořádně, tak do toho. Tady máte základní použití HashSet u, který při volání contains interně volá metodu hashCode(), v tomto případě konkrétně java.lang.Enum­.hashCode(). Když tvrdíte, že je tato metoda v OpenJDK implementována špatně a nesplňuje kontrakt, doplňte kód do metody magic() tak, aby se ta chyba projevila, tj. aby assert nebyl splněn. Pokud se vám to nepodaří, je mi líto, ale pak nezabráníte tomu, aby se na závěr nevypsala smutná pravda o vašich schopnostech. V metodě magic() můžete použít jakýkoli kód z veřejného API Java SE 11, tj. žádné unsafe třídy nebo metody, žádné volání nativního kódu apod. Protože jednám fér, nemusí ten assert selhat při každém spuštění, ale stačí, když se to podaří průměrně alespoň jednou za tisíc spuštění aplikace.

    Snad tomu kódu rozumíte, víte, jak funguje hashovací tabulka a chápete, proč se v tomhle kódu ta metoda java.lang.Enum­.hashCode() volá.

    Dokud se vám nepodaří takový kód napsat, prohlašuji vás oficiálně za trolla, který nic neumí a měl by chodit kanálama. Hodně štěstí!

    public class Pokus {
     public enum Troll {
       DW, GTOR
     }
    
      public static void main(String[] args) {
        Set<Troll> setOfTrolls = Collections.unmodifiableSet(new HashSet<>(Set.of(Troll.DW, Troll.GTOR)));
        magic(Troll.DW);
        assert setOfTrolls.contains(Troll.DW);
        System.out.println("Uživatel dw ničemu nerozumí, ale nedokáže to poznat, protože ničemu nerozumí.");
      }
    
      private static void magic(Troll troll) {
        //tady se realizujte
      }
    }