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.
Tarvitsen apuanne
24
524
Vastaukset
- 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
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 := ansistringKokeile 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 := ansistringIhan 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 3 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kiitos nainen
Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik185243MTV: Kirkossa saarnan pitänyt Jyrki 69 koki yllätyksen - Paljastaa: "Se mikä oli hyvin erikoista..."
Jyrki Linnankivi alias Jyrki 69 on rokkari ja kirkonmies. Teologiaa opiskeleva Linnankivi piti elämänsä ensimmäisen saar1162730- 102274
Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?
Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun5882012Kirjoita yhdellä sanalla
Joku meihin liittyvä asia, mitä muut ei tiedä. Sen jälkeen laitan sulle wappiviestin1221739Olet hyvin erilainen
Herkempi, ajattelevaisempi. Toisaalta taas hyvin varma siitä mitä haluat. Et anna yhtään periksi. Osaat myös ilkeillä ja701322Yksi syy nainen miksi sinusta pidän
on se, että tykkään luomusta. Olet luonnollinen, ihana ja kaunis. Ja luonne, no, en ole tavannut vielä sellaista, joka s411309Paljastavat kuvat Selviytyjät Suomi kulisseista - 1 päivä vs 36 päivää viidakossa - Katso tästä!
Ohhoh! Yli kuukausi viidakossa voi muuttaa ulkonäköä perusarkeen aika rajusti. Kuka mielestäsi muuttui eniten: Mia Mill31088Hyvää Joulua mies!
Toivottavasti kaikki on hyvin siellä. Anteeksi että olen hieman lisännyt taakkaasi ymmärtämättä kunnolla tilannettasi, o641047Veda uskonto vs. muut uskonnot
Mitenkähän tuo Veda(Krisha)uskonto loppujen lopuksi eroaa muista niin sanotuista ilmoitus uskonnoista? Siinäkin vedotaan3821041