Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
Miccer
HV Guru
liitunud: 01.08.2004
|
23.08.2017 19:44:38
C# mdb-ga ühendamine |
|
|
Tarvis oleks vaja saada ühe ms access failiga ühendus.
Fail on parooliga ja parool sisaldab non printable sümboleid (igast enterid ja jne väljastamatud sümbolid).
Parool ise on olemas HEX kujul. Probleem seisneb selles, et ei õnnestu luua connectionStringi (sellist mis ka ära ühendaks).
Ainus ligilähedane teema mis googlest leidsin on see.
https://stackoverflow.com/questions/29428692/using-non-ascii-characters-in-connection-string-password
Kui keegi valdab C# vähe kodusemalt siis äkki õnnestub probleem lahendada.
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
andresv
HV kasutaja
liitunud: 05.12.2004
|
24.08.2017 19:25:19
|
|
|
byte[] password = {0xCA, 0xFE, 0xBA, 0xBE, ....};
ja siis googlelda kuidas sellest byte arrayst string saada või muu sobiv andmetüüp.
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
24.08.2017 23:05:04
|
|
|
andresv, seda lahendust juba proovitud ja muude sümbolitega toimib aga 0x00 annab errori :/
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
25.08.2017 10:31:05
|
|
|
Ma ise olen kasutanud lihtsamat viisi C-s stringile sisestamisel *string=0x6500 (numbrid on valitud ascii kood, seejuures tuleb arvestada little endianiga!!)või siis *string='abcd\0', seejuures erimärkidega saab ka muid koode sisestada
|
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
28.08.2017 09:40:21
|
|
|
kalvis kirjutas: |
Ma ise olen kasutanud lihtsamat viisi C-s stringile sisestamisel *string=0x6500 (numbrid on valitud ascii kood, seejuures tuleb arvestada little endianiga!!)või siis *string='abcd\0', seejuures erimärkidega saab ka muid koode sisestada |
See annab näiteks sama veateate. Ehk hetkel ei taha õnnestuda nulli kasutamine
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
28.08.2017 12:15:00
|
|
|
Võimalik, et tüübikontroll sekkub. Sel juhul tuleb tüübiviit sulgudes ette kirjutada. See nõuab väga täpselt teadmisi tüübiteisenduste kohta.
Mul C oli tükk tegu, et ühte tüüpi muutujatele saaks valest tüübist õieti väärtuseid anda (eriti soovisin stringe sedasi kiirelt väärtustada), eriti keeruline on stringidega. Seal on veel Little endian vaja ka arvesse võtta.
Kas stringil ikka mälu on olemas? Võibolla püüad ilma mäluta stringi väärtustada siis saab veateate pulli küll.
Võibolla alusta sellega, et parooli viida väärtustad konstant massiiviga kohe deklareerimisel siis alguses üritad printf käsuga välja printida ja kui vaja kasvõi ekraanile baidi kaupa, suurendades muutujat ühe võrra kuni null välja ilmub. Kui nüüd stringi väärtustamine on selge siis võid ka muid nippe juba kasutada.
|
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
14.09.2017 09:05:01
|
|
|
kalvis kirjutas: |
See nõuab väga täpselt teadmisi tüübiteisenduste kohta. |
Kuna ise taipan asja kergelt käigupealt ja näidete baasil siis pole süvaõpinguteks aega.
Kas mõni mode saaks liigutada teema tööpakkumise alla. Äkki saame seal motivatsioonitasuga asja lahendada.
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
16.09.2017 17:24:31
|
|
|
Kas kõige lihtsam lahendus ei tule kõne alla ehk asendada see HEX kujul parool mõne ainult loetavaid märke sisaldava parooliga. 0x00 on üldiselt üks ebamugav sümbol, isegi kui keel ise nagu lubaks seda stringis kasutada, võib mõnel juhul mõni madalama taseme library sellest ikka valesti aru saada. Hint: klassikalise C/C++ puhul on 0x00 stringi lõpu sümboliks vähemalt siis kui andmetüübiks on tavaline char
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
17.09.2017 14:30:53
|
|
|
napoleon kirjutas: |
Kas kõige lihtsam lahendus ei tule kõne alla ehk asendada see HEX kujul parool mõne ainult loetavaid märke sisaldava parooliga. |
Mis lahendus selleks on? Parooli saab ju muuta või eemaldada alles siis kui ühendus loodud või fail avatud. Või on mõni muu moodus ka?
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
17.09.2017 14:58:57
|
|
|
Ma lihtsalt eeldasin, et kui kellelgi õnnestus selline parool panna, siis see keegi saab mingil moel faili avada ja parooli ära muuta. Või teine variant on googeldada ehk leiab mõne password reset tool'i, millega parooli maha saab võtta
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
29.09.2017 11:08:05
|
|
|
Need tavalised mdb taastajad ei saa sellega hakkama. Kõik läbi proovitud.
See ühenduse loomine ei ole võimatu tegevus. Sõber mulle aasta eest selle programmi juba kirjutas. Kõik toimis.
Aga kõvaketta hävimisega läks mul see kaduma ja ta ei suuda meenutada mis moodi ta selle tookord ära lahendas.
Nii siis sai siia pöördutud.
Teeni 100.- https://foorum.hinnavaatlus.ee/viewtopic.php?p=9609170#9609170
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
lkallas
HV vaatleja
liitunud: 26.10.2017
|
26.10.2017 18:12:17
|
|
|
Miccer kirjutas: |
Need tavalised mdb taastajad ei saa sellega hakkama. Kõik läbi proovitud.
See ühenduse loomine ei ole võimatu tegevus. Sõber mulle aasta eest selle programmi juba kirjutas. Kõik toimis.
Aga kõvaketta hävimisega läks mul see kaduma ja ta ei suuda meenutada mis moodi ta selle tookord ära lahendas.
Nii siis sai siia pöördutud.
Teeni 100.- https://foorum.hinnavaatlus.ee/viewtopic.php?p=9609170#9609170 |
Said lahendatud? Oled kindel, et see HEX on korrektne? Kust see algupäraselt saadud on?
Kui ei ole lahendatud siis ma võtaks väljakutse vastu.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
26.10.2017 18:50:03
|
|
|
Hetkel jah sain tööpakkumise tibake teistmoodi lahenduse aga ka see sobis.
Hex peab olema õige, asi taandus suuresti selle 0x00 sümboli taha, et seda ei õnnestund kasutada.
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
|
tagasi üles |
|
|
Miccer
HV Guru
liitunud: 01.08.2004
|
28.10.2017 09:47:14
|
|
|
Ei saanud ühtegi moodi kõik lõppesid sama erroriga.
Kell huvi võib ju proovida. Võid failile panna ka suvaka parooli, ja kui nulli edastamine veata läbi läheb siis vaataks isegi seda lahendust.
Suvaka parooli puhul saad siis lõpuks lihtsalt teate et parool on vale. Ja kui edastamine ei õnnestu siis arvatavasti sarnane veateade nagu kolmandas postis.
|
|
Kommentaarid: 1478 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
1032 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
31.10.2017 13:55:00
|
|
|
Võtsin sportiklust huvist ja kirjutasin C (minGW) lihtsa testprogrammi
#include <stdio.h>
#include <stdlib.h>
char test[10];
int main()
{
printf("Hello world!\n");
//test[0]='a';
//test[1]='\n';
//test[1]=0;
*(int*) test=0x6665;
printf("string %s\n",test);
return 0;
}
Nii saab numbriga väärtustada stringi. Ka saab ükshaaval panna stringile nulli otsa nii \n kui otse nulliga väärtustades (võta koodis // eest ära). Pööra tähelepanu little endialile.
|
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
31.10.2017 15:59:45
|
|
|
C puhul tähistab 0x00 ju stringi lõppu, tõenäoliselt sellest tal kõik need jamad olidki, et isegi kui kõrgema taseme kiht seda tunnistab, võib mõni madalama taseme library ikka arvata, et selle koha peal saab string otsa.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
01.11.2017 12:31:19
|
|
|
Ei 0x6665 tähistab 16-ndsüsteemis arvu. Miks ma kirjutasin 16-ndsüsteemis on seepärast, et ascii tabelis on tähed antud ka 16-ndkoodis ja nii saab väga lihtsalt ja mugavalt stringe lennult kirjutada. Mõeldud on see tavaliselt lühivastuste puhuks kus näiteks "press Y or N" kirjutangi Y stringi otse ascii koodi numbriga ning kasutan otse numbrilist kontrolli N: if (*(int*) sisestatud==0x59) {//tee midagi mis on Y tähe vajutamise korral.}
Muidu tuleb C-s kasutada ikkagi stringide võrdlemisel funktsioonide abi aga nii saab otse koodis tavalist käsku kasutada. Ma kasutan tavaliselt int viita siis pole tüübiteisendust üldse vaja koodi kirjutada. Palju kasutan ka case võrdluses
Ka funktsiooni kasutades saab suht lihtsalt võrrelda - ühel pool on stringi viit ja teisel pool "misiganes"
|
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
01.11.2017 12:45:00
|
|
|
kalvis, ma hakkasin sellest nullist sellepärast jahuma, et algselt küsijal just sellega oligi probleem, et paroolis oli 0x00 ja sellist connection stringi ei võetud kuidagi omaks.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
02.11.2017 14:35:21
|
|
|
0x00 on tavaline null numbriliselt ja kui tead asukohta siis if (string[x]==0) saab alati kontrollida, sidurdada jne. Mu näites on kõik samaväärsed test[1]=0 kui ka test[1]='\0' on just samane väärtus 0x00.
C-s on 0 stringi lõpu tunnus.
tavaliselt on stringi tehteks päris kasulik tutvuda stringide funktsioonidega (mid, left, right, cmp jne.), mis on üldtuntud ja laialdasemalt kasutusel. On üks üsna hea stringi kopeerimise funktsioon, kus saad ära määrata millised erimärkidega stringi tükeldatakse, tavaliselt on nendeks siis punkt, koma, null ja tühik (või muud märgid). ja kopeerib teise stringi kuni erimärgini sisu. Nii saab lihtsa nipiga kätte just puhta stringi sisu.
|
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
02.11.2017 15:22:49
|
|
|
kalvis, loe teemaalgataja postitust, siis saad aru milles mure on. Mure on selles, et mingi keele enda library jonnib asja peale mitte selles, et oma koodis poleks võimalik neid nulle sinna saada või nende olemasolu kontrollida.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
05.11.2017 11:52:33
|
|
|
Ju ta pole viitsinud scannida algset soovitust tõmmata string char[x], x++ meetodil läbi ja trükkida kood ekraanile.
Tuleb defineerida stringi viit ja see väärtustada tema funktsioonist saadud andmetele. Ma sain aru, et tema funktsioonis oli probleemiks, see et string sisaldas nulli, mis peabki olema, kuid ta kasutas vale võrdlusfunktsiooni, mis ei osanud seda nulliga stringi võrrelda.
OK, loeme teema lõpetanuks, kuigi mul on kuri kahtlus, et teemaalgataja ei saanudki aru milles asi oli.
|
|
tagasi üles |
|
|
DoS
HV veteran
liitunud: 18.08.2002
|
05.11.2017 12:01:26
|
|
|
Sulle on mitu korda juba öeldud, et sina oled see, kes asjast aru ei saa, aga ikka ajad oma jura.
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
05.11.2017 14:28:10
|
|
|
kalvis kirjutas: |
Ju ta pole viitsinud scannida algset soovitust tõmmata string char[x], x++ meetodil läbi ja trükkida kood ekraanile.
Tuleb defineerida stringi viit ja see väärtustada tema funktsioonist saadud andmetele. Ma sain aru, et tema funktsioonis oli probleemiks, see et string sisaldas nulli, mis peabki olema, kuid ta kasutas vale võrdlusfunktsiooni, mis ei osanud seda nulliga stringi võrrelda.
OK, loeme teema lõpetanuks, kuigi mul on kuri kahtlus, et teemaalgataja ei saanudki aru milles asi oli. |
Puust ja punaselt - oletame et annan sulle ühe closed source library. Huvipakkuv funktsioon on seal näiteks selline:
int connect(char* parool,...);//ärme nüüd hakkame vaidlema, mis tüüpi parameetri see funktsioon tagastama peaks, see ei puutu teemasse
Palun selgita, kuidas sinu kirjeldatud meetodid aitavad sellele 0x00 sümbolit sisaldava parooli ette anda nii, e ta selle õigesti omaks võtaks. Teemaalgataja probleem ongi umbes selline st. tal pole vaja seda parooli mitte ekraanile trükkida ega millegagi võrrelda vaid mingile closed source library-le parameetrina ette anda.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
09.11.2017 11:55:19
|
|
|
Mis liiki muutujana soovib see library parooli saada? Oletan, et ta annab mäluala viida kuhu kopeerida stringi sisu.
Sel juhul tuleb library näidatud mälualale kopeerida (võib kasutada stringi kopeerimist või tavalist memcopy). parooli lõppu tuleb lisada null. Siin võib olla üks aga - tegu on programmidevahelise globaalmuutujaga ja vastavalt tuleb ka seda programmis defineerida. Siin võib kergesti veateate saada, sest ühe programmi virtuaalmälu ala pole teisele nähtav ja vastupidi. Selleks ongi väliste muutujate defineerimist vaja - sel juhul teeb op.süsteem need üksteisele nähtavaks.
Kui ta aga tahab saada lihtsalt viita minu mäluaadressile siis on vaja anda paroolistringi (aadress =&paroolistring). Globaalmuutuja defineerimine tõenäoliselt vaja ka teha.
|
|
tagasi üles |
|
|
|