Tarvitsen apuanne

Anonyymi-ap

Eli pitäisi ohjelmoida Lazaruksella ja sen mukana Free Pascalilla GUI komentorivisoftalle joka laskee md5summia tiedostoista, kyseinen komentorivisofta on md5deep ja käyttis on Linux Mint 20.2.
En vaan osaa:
1. tehdä määrittelyä merkkijonolle
2. käskyttää ulkoista ohjelmaa eli kokeilin mm. RunCommand-käskyä joka ei toiminut
3. hakea OpenDialog1-kontrollista haluttua hakemistoa jonka sitten syöttäisin tuolle komennolle joka sitten ajaa sen md5deepin halutun hakemiston kohdalla ja tekee md5-summatiedoston.

Eli tällainen käsky pitäisi antaa: "md5deep -r [haluttu hakemisto] >md5summat.md5"

Osaatteko auttaa ongelmassani? Tarjoan virtuaalisesti pullakahvit sille joka osaa ratkaista ongelmani.

24

865

    Vastaukset 24

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Miksi sille pitää olla GUI?

      • Anonyymi

        Miksi ei saisi olla GUI? Eikö käytön helpottaminen ole vaan hyvä asia?


      • Anonyymi
        Anonyymi kirjoitti:

        Miksi ei saisi olla GUI? Eikö käytön helpottaminen ole vaan hyvä asia?

        Millä tavalla se GUI helpottaa kun muutamalla näppäimen painalluksella toimii jo?

        Ennemminkin pitäisi kiinnostaa se, että mihin sitä md5 summaa tarvitaan ja miksi sitä pitää käsinee tehdä että eikö sitä voisi automatisoida sinne missä sitä tarvitsee.


      • Anonyymi
        Anonyymi kirjoitti:

        Millä tavalla se GUI helpottaa kun muutamalla näppäimen painalluksella toimii jo?

        Ennemminkin pitäisi kiinnostaa se, että mihin sitä md5 summaa tarvitaan ja miksi sitä pitää käsinee tehdä että eikö sitä voisi automatisoida sinne missä sitä tarvitsee.

        MD5summaa tarvitaan sen varmistamiseen että tiedostot ovat ehjiä eikä ne ole muuttuneet ja GUI taas helpottaa kun ei tarvi avata terminalia ja näpytellä kaikkea itse vaan sujuisi hiiren klikkauksilla.


      • Anonyymi
        Anonyymi kirjoitti:

        MD5summaa tarvitaan sen varmistamiseen että tiedostot ovat ehjiä eikä ne ole muuttuneet ja GUI taas helpottaa kun ei tarvi avata terminalia ja näpytellä kaikkea itse vaan sujuisi hiiren klikkauksilla.

        Tuollaisia on jo.

        Ehkä olisi parempi tunkea se MD5 tarkistus siihen filemanageriin vaikka, että saisi napista jonkun sarakkeen ja laskis siinä kun avaa kansiota. Ellei jo ole filemanagerissa valmiina.


      • Anonyymi
        Anonyymi kirjoitti:

        Millä tavalla se GUI helpottaa kun muutamalla näppäimen painalluksella toimii jo?

        Ennemminkin pitäisi kiinnostaa se, että mihin sitä md5 summaa tarvitaan ja miksi sitä pitää käsinee tehdä että eikö sitä voisi automatisoida sinne missä sitä tarvitsee.

        "Millä tavalla se GUI helpottaa kun muutamalla näppäimen painalluksella toimii jo?"

        Ha Haa!

        JOS kyse olisi Windows -ohjelmasta, niin siihen olisi yksinkertaista rakentaa jopa Drag&Drop -toiminto, eli voit esim. Windows Tiedostonhallinnasta raahata omaan ohjelmaasi yhden tai useamman tiedoston, ja oma ohjelmasi voisi näistä laskea kryptotiivisteen, olipa se MD5, SHA1. SHA-256, SHA-3 tai vaikkapa BlakeHash2s.

        Vinkki:
        WM_DropFiles (MSDN)

        Mutta eipä taida linuxissa olla määritelty sellaista kuin WM_DropFiles.
        Eli miten onnistuisi Linuxissa tuollainen Drag&Drop -toiminto?

        koko GUI:n ideahan on tehdä ohjelmista helppoja ja miellyttäviä käyttää.

        Mutta linux -maailma on täynnä komentoriviohjelmia, ehkä juuri siksi, kun perinteisesti Linuxissa ei ole ollut Delphiä.


      • Anonyymi
        Anonyymi kirjoitti:

        "Millä tavalla se GUI helpottaa kun muutamalla näppäimen painalluksella toimii jo?"

        Ha Haa!

        JOS kyse olisi Windows -ohjelmasta, niin siihen olisi yksinkertaista rakentaa jopa Drag&Drop -toiminto, eli voit esim. Windows Tiedostonhallinnasta raahata omaan ohjelmaasi yhden tai useamman tiedoston, ja oma ohjelmasi voisi näistä laskea kryptotiivisteen, olipa se MD5, SHA1. SHA-256, SHA-3 tai vaikkapa BlakeHash2s.

        Vinkki:
        WM_DropFiles (MSDN)

        Mutta eipä taida linuxissa olla määritelty sellaista kuin WM_DropFiles.
        Eli miten onnistuisi Linuxissa tuollainen Drag&Drop -toiminto?

        koko GUI:n ideahan on tehdä ohjelmista helppoja ja miellyttäviä käyttää.

        Mutta linux -maailma on täynnä komentoriviohjelmia, ehkä juuri siksi, kun perinteisesti Linuxissa ei ole ollut Delphiä.

        Jos käyttöjärjestelmästä löytyy Linux, siinä on yleensä valmiina MD5 summien laskenta ettei tarvitse käydä tekemään ohjelmaa sitä varten.


      • Anonyymi
        Anonyymi kirjoitti:

        Jos käyttöjärjestelmästä löytyy Linux, siinä on yleensä valmiina MD5 summien laskenta ettei tarvitse käydä tekemään ohjelmaa sitä varten.

        niin on... mutta jos haluaa tehdä GUI -systeemin MD5 -laskennalle, niin ei ole mikään pakko kutsua komentoriviohjelmaa.... Delphille löytyy MD5 -laskentaluokkia / aliohjelmakirjastoja, esim:

        DEC - Delphi Encryption Compendium
        DCPcrypt

        kummastakin käsittääkseni löytyy MD5 -laskenta.

        Varmasti löytyy muitakin, mutta nuo 2 ovat itselleni tuttuja.

        Jos laskennan kohde on tiedosto, niin joko voi käyttää TFileStream -luokan ReadBuffer() -metodia, tai sitten "memory-mapped files".


    • Anonyymi

      Muutama vinkki: Merkkijonona voi käyttää string tai ansistring-tyyppejä. Jos on tottunut c-mäiseen ratkaisuun voi kokeilla tutkia array of char -rakennetta:
      https://wiki.freepascal.org/Character_and_string_types
      runCommand esimerkkejä:
      https://wiki.freepascal.org/Executing_External_Programs
      -huomaa, että '>' ohjaus tiedostoon on bash/shell ominaisuus eikä sitä voi käyttää
      -runCommand:in outputString:stä löytyy kuitenkin ajetun ohjelman outputti
      Voit openDialog1:n metodiin varmasti lisätä kutsuttavan funktion, mitä tapahtuu silloin kun kenttään on syötetty arvo tai sitten voit lisätä button:in, joka tekee kopion syöttökentän datasta.
      -ajetun ohjelman exit-status pitää tarkistaa, jos syötetty data oli vaikka virheellistä puppua.

      • Anonyymi

        Sain jo jotain aikaiseksi mutta nyt tuo GUI-softa ilmoittaa että Executable not found: "md5deep" vaikka se varmasti on koneellani ja toimii komentorivillä.
        Nyt siis sain haettua SelectDirectoryDialog1.InitialDir avulla sen hakemiston muuttujaksi ja syötettyä sen tohon komentoon, siis mulla on var-kohdassa dir : ansistring eli muuttuja on siis jo määritelty.
        Mutta mitä teen tuolle ettei muka md5deepiä löydy? Pitäisi kyllä löytyä kun se kerran toimii ja on tosiaan koneellani.


      • Anonyymi

        Tässä tuon proceduurin koodi:

        procedure TForm1.Button2Click(Sender: TObject);
        begin
        dir := SelectDirectoryDialog1.InitialDir;
        Edit2.Text := dir;
        if RunCommand('/bin/md5deep ' ,' -r ',dir,summa) then Edit3.Text := summa
        end;

        Tuossa vaan tulee virheilmoitus että:

        unit1.pas(57,48) Error: Incompatible type for arg no. 4: Got "AnsiString", expected "TProcessOptions"

        Eli mikä meni pieleen? Muuttujat dir ja summa ovat molemmat määritelty ansistring-muuttujiksi, siis näin
        var
        dir := ansistring
        summa := ansistring


      • Anonyymi
        Anonyymi kirjoitti:

        Tässä tuon proceduurin koodi:

        procedure TForm1.Button2Click(Sender: TObject);
        begin
        dir := SelectDirectoryDialog1.InitialDir;
        Edit2.Text := dir;
        if RunCommand('/bin/md5deep ' ,' -r ',dir,summa) then Edit3.Text := summa
        end;

        Tuossa vaan tulee virheilmoitus että:

        unit1.pas(57,48) Error: Incompatible type for arg no. 4: Got "AnsiString", expected "TProcessOptions"

        Eli mikä meni pieleen? Muuttujat dir ja summa ovat molemmat määritelty ansistring-muuttujiksi, siis näin
        var
        dir := ansistring
        summa := ansistring

        Kokeile mitä 'which md5deep' antaa?
        var dir: ansistring;
        summa: ansistring;
        Tuo TProcessOptions voisi ehkä olla arvoltaan poWaitOnExit, muitakin voi asettaa jos on tarvis eli run-command odottaa aliprosessin päättymistä. Kannattaa katsoa runCommand-esimerkki. Pitäisikö parametri/arvo olla pari? ie ['-r',''] ja samalla tavalla TProcessOptions:in kanssa:
        https://forum.lazarus.freepascal.org/index.php?topic=46078.0


      • Anonyymi
        Anonyymi kirjoitti:

        Tässä tuon proceduurin koodi:

        procedure TForm1.Button2Click(Sender: TObject);
        begin
        dir := SelectDirectoryDialog1.InitialDir;
        Edit2.Text := dir;
        if RunCommand('/bin/md5deep ' ,' -r ',dir,summa) then Edit3.Text := summa
        end;

        Tuossa vaan tulee virheilmoitus että:

        unit1.pas(57,48) Error: Incompatible type for arg no. 4: Got "AnsiString", expected "TProcessOptions"

        Eli mikä meni pieleen? Muuttujat dir ja summa ovat molemmat määritelty ansistring-muuttujiksi, siis näin
        var
        dir := ansistring
        summa := ansistring

        Ihan tiedoksi:

        MD5 (ja monelle muullekin hash -algoritmille) on saatavissa Objectpascal -lähdekoodina tehty toteutus.

        Ei siis tarvitse käynnistää erillistä komentoriviohjelmaa MD5:n (tai muunkaan hashin) laskemiseksi.

        Delphistä tuttuja on ainakin nämä:

        https://wiki.freepascal.org/DCPcrypt

        https://github.com/MHumm/DelphiEncryptionCompendium

        Molemmista löytyvät MD5, mutta niistä löytyy niin muita Hash -funktioita kuin myös muuta kryptotekniikkaan liittyvää (kuten AES eli Rijndael).

        Tietty perusosaamien asiasta on silti syytä olla itsellä !

        esim. MD5 -tiiviste on 128 -bittinen eli 16 -tavuinen.

        Jos ei ko. tyyppiä ole valmiiksi määritelty, niin kas näin:

        type
        THash128 = Array[0..15] of Byte;

        ja jos/kun tuo pitää saada heksadesimaalimerkkijonoksi, niin kas näin:

        function Hash128ToString(var H:THash128):String;
        var
        TmpS : String;
        i : Integer;

        begin
        SetLength(Result, SizeOf(H) shl 1);
        for i := 0 to High(H) do begin
        TmpS := IntToHex(H[i], 2);
        Result[(i shl 1)+1] := TmpS[1];
        Result[(i shl 1)+2] := TmpS[2];
        end;
        end;

        ylläolevasta funktiosta voi ottaa mallia myös muiden vastaavien suhteen, esim:

        type
        THash256 = Array[0..31] of Byte;

        function Hash256ToString(var H:THash256):String;

        ei se sen vaikeampaa ole !

        Nuo DcpCrypt sekä Delphi Encryption Compendum ovat parhaita yleiskäyttöisiä Hash -ja kryptokirjastoja.

        Niiden pahin puute on se, ettei kumpikaan tue asymmetrisia salauksia kuten RSA tai EllipticCurve -pohjaisia systeemejä.

        RSA:ta moni pitää vanhanaikaisena, mutta onko varma, ettei EC ole NSA:n ns. miinoittama systeemi ?


    • Anonyymi

      Kyllähän sen näkee!

      "Delphi
      0
      15
      124
      Tarvitsen apuanne
      Eli pitäisi ohjelmoida Lazaruksella ja sen mukana Free Pascalilla GUI komentorivisoftalle joka laskee md5summia tiedosto...
      Default user icon
      Aloitettu
      16.05.2023 22:22
      Vastattu
      2023-05-18 10:49:58
      Yleistä ohjelmoinnista
      0
      10
      87
      Koodasin tossa 496 riviä tällä viikolla
      Aloin vaan paukuttaan koodia editorissa. Nyt täytyy ruveta miettimään mitä teen koodilla. Harmittaa vaan kun tuli ehkä t...
      Default user icon
      Aloitettu
      13.05.2023 14:59
      Vastattu
      2023-05-15 12:20:43
      Yleistä ohjelmoinnista
      0
      5
      < 50
      Snake ja Uroburos sorsat
      Mistähän saisi em. ohjelmien lähdekoodit. Opettelumielessä kiinnostaisi tutustua. Ei ole aikomus hyödyntää kaupallisesti..."

      Kaikki saman pellen juttuja!

      • Anonyymi

        Ei ole nuo muut mun kirjoittamia, minä olen tehnyt VAIN yhden aloituksen!


    • Anonyymi

      Eikös tuota softaa ja koodia saa ihan valmiina, miksi kaikki pitäisi aina itse koodata.

    Ketjusta on poistettu 4 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      60
      1049
    2. Minä en ole koskaan

      Rakastanut ketään toista yhtä paljon kuin sinua
      Ikävä
      98
      1024
    3. Tiesitkö? Jorma Uotisen EX-rakas on Helena Lindgren - Nämä ovat välit nyt: "Me ollaan..."

      Jorma Uotinen ja Helena Lindgren olivat avoliitossa v. 1982-1999. Pariskunta oli aikansa näyttävä julkkispari, missä i
      Kotimaiset julkkisjuorut
      21
      882
    4. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      60
      810
    5. Vähän pitää

      Kiusia ja näyttää
      Ikävä
      135
      802
    6. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      124
      795
    7. Kenen viisautta on ollut laittaa tie väärällä murskeella pilalle

      Kenen viisautta on ollut kun Siimeksen/Kylmänpurontie pantu pilalle kun on ajettu liian karkeaa mursketta. Rengasliikke
      Hyrynsalmi
      25
      689
    8. Taidat olla

      Luovuttanut jo minun suhteeni osalta?
      Ikävä
      45
      666
    9. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      52
      664
    10. Kuhmolainen opettaja tuomittu vainoamisesta

      https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen
      Kuhmo
      14
      625
    11. Minä muistan

      Minä muistan sinut nauravana. Sellaisena, joka sai tavallisenkin hetken tuntumaan vähän kevyemmältä, kuin huoneeseen ol
      Ikävä
      45
      620
    12. Mä voisin rakastua noihin tähti silmiin

      Katseesi on niin lumoava nainen💚.
      Ikävä
      19
      607
    13. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      83
      586
    14. Jos tullaan toisiamme vastaan, niin

      pitäiskö pysähtyä ja onnitella?
      Ikävä
      46
      578
    15. Koska Martina viettää aikaansa lapsiensa kanssa

      Äiti vaan juoksee miehen perässä Tallinnassa, Lontoossa, Turussa. Kyllä oli kätilö oikeassa, kun sanoi, että ei olisi ka
      Kotimaiset julkkisjuorut
      141
      575
    16. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      128
      573
    17. Voisiko vielä välillemme jotain kehittyä

      Vai heihei ja ei nähdä enää.
      Ikävä
      35
      570
    18. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      47
      568
    19. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      48
      527
    20. Pahkalassa tapahtuu

      Mitäs on tapahtunut yöllä pahkalan kerrostaloilla.oli poliisia ja ambulanssia taas vaihteeksi
      Parkano
      9
      523
    Aihe