flash key   zodpovězená otázka

VB.NET

Dobrý den,opět zde prosím o radu,dosal jsem nápad ale realizace pokulhává,pan Langer mi poradil jeho zjednodušení (přemýšlel jsem zbytečně složitě).Jde o to,že bych chtěl spouštět program a to tak,že do USB jednotky bude zasunut flashdisc,ten obsahuje program, nebo něco jiného jednoduššího a v PC bude při startu spuštěn program který by prohledával ono USB.V případě že jej najde,onen soubor nebo program,vyčte z něj spoustu údaju,jako jméno,heslo,...atd.Pokud heslo souhlasí,spustí příslušný program do kterého by odeslal to samé heslo a vyčtené informace k další páci(něco jako elektroniký podpis spouštěcího klíče a uživatele).Ale vubec nemám potuchy,jak takový program mám udělat,jde mi o to prohledávání USB a následné vyčtení a přeposlání udaju.

Pokud má někdo nápad tak děkuji za snahu pomoci

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, budou-li mé dosavadní znalosti VB dostačovat, abych Vám pomohl s řešením Vašeho problému, ale myslím si, že i zkušenější kolegové, kteří by mohli pomoci, by potřebovali trošičku ujasnit Vaše představy o tom, co se má vlastně dít. (nevím, máte-li na mysli spouštět nějaký (rezidentní) program "při spuštění" PC, který by stále scanoval je-li přítomná flashka a pokud ano, jestli obsahuje nějaký soubor (šlo by to, ale nepovažoval bych to za ideální řešení), netuším co se má spustit, kdy se to má spustit a jak se to má spustit). Zkusme to tedy nejprve rozebrat - možná se dobéřeme i k nějakému konkrétnímu řešení, nebo, přinejmenším, pro ty zkušenější definujeme o co Vám vlastně jde.

Tak tedy:

Jak byste si představoval spuštění a ukončení Vašeho "Hlavního" programu? Spustí ho, v případě potřeby svým zásahem uživatel, nebo se má spustit automaticky při zasunutí flashky se správným souborem?

Pokud by to bylo skutečně myšleno tak, že by ta flashka měla fungovat jako nějaký jednoduchý klíč a samotný program by uživatel spouštěl dle potřeby ručně, nekomplikoval bych to dalšími složitostmi, rutinami či předáváním parametrů, ale přímo v tom hlavním programu bych prošel flashku a hledal definovaný soubor, dále bych zkontroloval jeho obsah a pokud by souhlasil, spustil bych vlastní program, v opačném případě jej zastavil.

Pokud by mělo dojít k automatickému spuštění programu po zasunutí flashky, pak je buď možno se spolehnout na "autorun", který ale může mít uživatel vyplý, nebo taky závisí na operačním systému, nebo by musel skutečně v počítači běžet nějaký rezidentní program (né každý uživatel to ale rád vidí), který by (třeba v nastaveném intervalu) kontroloval, jestli je připojena flashka a pokud ano, jestli obsahuje správný soubor. I v tomto případě bych ale považoval za zbytečné (nebudou-li k tomu jiné důvody), předávat do toho hlavního programu nějaké parametry, stačilo by, aby tento rezident pouze spustil ten hlavní program a tento by si už údaje z příslušného souboru stáhnul sám.

Tím to ale nekončí.

Dalšími neméně širokými otázkami je, jak moc chcete mít tato "spouštěcí" data zabezpečena, jestli ten Váš "klíč" bude unikátní (pouze jeden pevný, který se bude porovnávat s jednou pevnou hodnotou natvrdo uloženou v programu), nebo bude variantní (a v programu se pak bude porovnávat na shodu s nějakým speciálním algoritmem), atd...

Jak tak koukám, je toho celkem dost. Zkuste se tedy zamyslet alespoň nad těmi hlavními požadavky co od toho čekáte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže zkusim to popořadě,snad nic nevynecham:

Fhleska by měla fungovat jako osobní klíč s uživatelským nastavením,třeba,funfoval by tak,že později spuštěný program z něj vyčte že jde o mne a mam toto nastaveni a toto heslo atd...V případě že se připojí sestra udělá to samé(nazval bych to jakymsi,takymsi přenosnym profilem).Ten program nezná uživatele jako windows,může se připojit kdokoli(to mi připomíná že sem mistifikoval,heslo je uloženo na flash které program spusti je stejné a pevně dané,ale je tam i heslo které si nastavý uživatel a to se zkontroluje ve flash ale přes program který se spustil),a tím že soubor na flash obsahuje všechny tyto informace,můžete přijít třeba ke kamarádce a pokračovat vedele kde jste zkončil a s vašíím osobním nastavením.Doufám že jsem to vysvětlil srozumitelně.Další je ten program který tu flashku vyhledá,to byl jen nápad že to má bejt program ve zkutečnosti netušim jak jinak by se dala kontrolovat přítomnost nového hardware(napadlo mě,zda windovs by nemohli nějak spustit ten program co vyčte data z flash při nalezení new hardware).A nakonec onen program,ten by byl spuštěn pokud heslo (pevné) souhlasí a načte data,potom si vyžádá heslo uživatele a pokud souhlasí je přístupny(s heslem uživatele jsem narazil na problém nemám s ním zkušenosti a nevim jak a kam se má uložit aby zustalo i při příštím spuštění),v případě že heslo nesouhlasí ma ,třeba,3 pokusi a porom se vypne,ale to není nutností.

to je snad vše,pokud jsem něco vynechal,potřebnou informaci,tak doplním ale momentálně mě nic víc nenapadá

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsme se o kousek posunuli, ale stále jste si neodpověděl na tu základní otázku-kdo bude iniciovat spuštění programu. Tak jak to popisujete bych to viděl na tu nejjednodušší cestu, tedy uživatel příjde k počítači a spustí si daný program. A myslím, že to není v obecné rovině žádným omezením, protože (pokud neprogramujete operační systém) dnes uživatelé většinou dělají na počítači s mnohem více různými programy, proto ten Váš budou spouštět asi toliko v případě potřeby.

A pokud je toto pro Vás přijatelné, dost si zjednodušíte celý problém, protože nepotřebujete žádný program, který by "hlídal změny HW", pouze po spuštění Vašeho programu otestujete, jestli je v systému buď na konkrétním místě (používáte 1 konkrétní počítač, takže se Vám Vaše flashka vždy hlásí pod stejným písmenem), nebo obecně kdekoliv v systému přítomen soubor s Vámi specifikovaným názvem a určitým obsahem. To si myslím by nemělo být nic složitého.

Problém pak nastává v těch vlastních přístupových heslech. Nevím, kam se tato ukládají v profesionálních SW, ale pro Vás by asi nejjednodušší bylo ukládat je do nějakého externího souboru (případně do registru). Práce s obojím ve VB je celkem příjemná a jednoduchá, má-li však to mít vůbec nějakou cenu, je třeba počítat s tím, že by bylo nutné při ukládání těchto dat využít nějakého šifrovacího algoritmu (VB naštěstí podporuje), případně by to celé možná šlo řešit systémem veřejných a privátních klíčů. Vy si například můžete ten "bezpečnostní" soubor na flashce uložit zašifrovaný pomocí tzv. veřejného klíče, a součástí Vašeho SW pak může být tzv. privátní klíč, pomocí kterého soubor teprve rozšifrujete, takže teď mne napadá, že vlastně i to uživatelské heslo by mohlo být schováno přímo v tom souboru na flashce, protože bez znalosti toho privátního klíče se k němu stejně nedostanete.

Ale téma šifrování by zabralo na jeden samostatný článek a já se přiznám, toto jsem zatím nepotřeboval a tudíž veškeré mé znalosti pocházejí pouze z literatury, tj. jednak jsem to nestudoval natolik, abych mohl dávat rozumy dál a také nemám (z hlediska autorských práv) právo toto dál šířit (protože bych asi pouze opisoval celé pasáže z publikací, kde je tato oblast celkem důkladně probírána). Možná by na toto téma mohli něco napsat pánové Herceg či Jecha.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano,váš nápad s tím spouštěním je to asi to nejjednodušší,ale o tom hesle a šifrování bych potřeboval něco poradit momentálně nevím jak v programu uložit to heslo aby zustalo uloženo v souboru.txt (neumim ho tam vepsat,vložit,zkoušel jsem to a pročetl všechny články zde na webu ale nepovedlo se mi to) a také bych chtěl tento soubor.txt nahradit databází ale nevim jak bych to udělal,hlavně pokud kliknu na new items... a tak dale a vyberu databázi,tak mi to napíše něco se žlutým vykřičníkem a konec.

ps:prosím jak udělám aby se při psaní hesla do textboxu zjevoval místo písmena tečka?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K poslední otázce:

Již ve vývojovém prostředí nastavte anebo v kódu

    TextBox1.UseSystemPasswordChar = True

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžete specifikovat to "neco se žlutým vykřičníkem"? Asi to k tomu vykřičníku něco napíše, co se mu nelíbí.

Jinak ale pro uložení hesla bych databázi jako takovou nepovažoval za ideální (pokud tedy Vaše aplikace nemá sama databázové zaměření a tedy již nějakou databázi sama nevyužívá). To přidání databáze do projektu (přes add item), totiž ve skutečnosti neznamená, že si do projektu přidáte nějaký soubor, který bude "fungovat jako databáze", ale že si vytvoříte propojení s nějakou existující databází tak, abyste mohli z programu přistupovat k datům v této databázi uloženým. (Jinak o této problematice databází na tomto serveru proběhlo již pár pěkných článků a na další slíbené netrpělivě čekáme).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud se jedná o zápis dat do textového souboru, je to ekvivalentní k jejich čtení, pouze místo StreamReaderu použijete StreamWriter. Teda třeba kód pro přidávání dalších hesel do souboru by mohl ve své nejjednodušší (nijak neošetřené) podobě vypadat následovně

Dim souborWrite As New IO.StreamWriter("database.txt", True)
souborWrite.WriteLine(TextBox2.Text)
souborWrite.Close()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel nejde mi to,píše to že soubor je používán jiným procesem, přitom to není pravda,po ukončení čtení tam mám "soubor.close()"

ale i přesto to prostě nejde,nevíte co může být špatně?

  Dim nalezeno As Boolean

        Dim heslo_kontrola As String = TextBox4.Text
        Dim heslo As String
        Dim soubor As New IO.StreamReader("database.txt") 'otevřít soubor

        While Not soubor.EndOfStream 'číst, dokud nejsme na konci souboru
            heslo = (soubor.ReadLine()) 'načíst první řádek z textu
            If heslo = heslo_kontrola Then
                nalezeno = True
            End If

End While
        soubor.Close()

        If nalezeno = True Then
            MsgBox("kontrola proběhla úspěšně")
        Else
            MsgBox("špatné kontrolní heslo!")

        End If
        Dim souborWrite As New IO.StreamWriter("database.txt", True)
        souborWrite.WriteLine(TextBox2.Text)
        souborWrite.Close()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přiznám se, že chybu nevidím. Jediné, co mohu poradit, dejte si někam na začátek Vašeho kódu bod přerušení a pak to odkrokujte, abyste zjistil, při jakém příkazu Vám to tu chybu vyhazuje.

Když jsem si Váš kód přepsal a pouze mírně upravil (do jména souboru s daty jsem dal absolutní cestu, abych ho nemusel hledat někde hluboko v dočasných adresářích a taky jsem obě činnosti rozdělil pod 2 samostatná tlačítka (můžete je nazvat "Ověř heslo" a "Přidej heslo" - jednak je to logičtější, jednak jsem nemusel ten soubor s hesly nejprve ručně vytvořit a vytvořil jsem si ho přímo programem), tak mi to fungoje bez problémů. Jenom pro úplnost ten fungující upravený kód:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim souborWrite As New IO.StreamWriter("c:\database.txt", True)
        souborWrite.WriteLine(TextBox1.Text)
        souborWrite.Close()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim nalezeno As Boolean

        Dim heslo_kontrola As String = TextBox1.Text
        Dim heslo As String
        Dim soubor As New IO.StreamReader("c:\database.txt") 'otevřít soubor

        While Not soubor.EndOfStream 'číst, dokud nejsme na konci souboru
            heslo = (soubor.ReadLine()) 'načíst první řádek z textu
            If heslo = heslo_kontrola Then
                nalezeno = True
            End If

        End While
        soubor.Close()

        If nalezeno = True Then
            MsgBox("kontrola proběhla úspěšně")
        Else
            MsgBox("špatné kontrolní heslo!")

        End If

    End Sub
End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě jste si ve vedlejším vlákně posteskl, že neumíte data Přepsat (naším postupem je pouze přidáváme).

Je to opět jednoduché a doporučuji věnovat pozornost při psaní kódu intellisense, která Vám ve VB nabízí a vysvětluje různé možnosti.

Takže, budete-li chtít data v souboru přepsat a ne přidávat, to ovládá právě ten přepínač "True" v tom deklarování proměnné SouborWrite. Dáte-li tam False, soubor se Vám celý přepíše (proto na to musíte jít trošičku jinak - chcete-li, samozřejmě, mít hesel více) A to tak, že si nejprve celý obsah souboru přečtete do nějaké proměnné, pak tu proměnnou upravíte dle Vaší představy ( přidáte nebo uberete nějaké řádky s nějakými hesly) no a pak to všechno zase pěkně zpátky zapíšete do souboru, který přepíše ten původní. Vše z výše jmenovaného již umíte, pouze, samozřejmě, nahradíte readline a writeline variantami read a write, případně dalšími - např. readtoend)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback