Kezdőoldal » Számítástechnika » Programozás » Ebben a programban mi lehet a...

Ebben a programban mi lehet a baj? (python) (egyszerűen hiába nézem nem jövök rá a problémára, (most kezdtem) ) rossz kifogás de ez van.

Figyelt kérdés

password = 'apple'


bemenet = input('What is password?')


proba = 0


while bemenet != password:

proba += 1

if proba == 3:

print('System closed!')

break


print('incorrect password, try again!')

bemenet = input('What is password?')


if bemenet == password:

print('Access given!')



2019. márc. 15. 23:10
1 2
 1/13 anonim ***** válasza:
47%
esr.fsf.hu/smart-questions_hu.html
2019. márc. 15. 23:23
Hasznos számodra ez a válasz?
 2/13 anonim ***** válasza:
31%
Nálam működik (persze ha berakom az indentálásokat amiket te is igazán jelölhettél volna valahogy, ha már az  -t nem ismered, akkor legalább pontokkal)
2019. márc. 15. 23:28
Hasznos számodra ez a válasz?
 3/13 anonim ***** válasza:
0%
Gyk kiszedi az indenteket.
2019. márc. 15. 23:50
Hasznos számodra ez a válasz?
 4/13 anonim ***** válasza:
66%

1. Ezért érdemes kódmegosztó oldalt használni - ha már a Gyakorikérdések rendszere eltünteti az indentálási szóközöket. Feltöltöttem a kódot ide:

[link]


2. Jó lenne tudni, milyen hibát ad vissza, mikor futtatod kedves kérdező, vagy mi nem működik.


A gyanúm szerint vagy az lehet a gond, hogy Python 2 alatt a kód nem fut le - sajnos a Python 2 input függvénye:

[link]

máshogy működik, mint a Python 3-ban:

[link]

vagy valami indentálási hiba lép fel a kérdezőnél (amit meg sajnos nem láthatunk.

2019. márc. 16. 00:10
Hasznos számodra ez a válasz?
 5/13 anonim ***** válasza:
38%

Bár nem a kérdésedhez tartozik, erre az utasításra egy kicsit térjünk ki:

password = 'apple'

A rendszered akkor lesz biztonságos, ha a jelszót, amivel hozzá lehet férni, titkosítva tárolod. Titkosításnak két fajtája van:

1) Kétirányú titkosítás - vagyis az adatot egy kulcsot használva titkosítod, és ugyanezt a kulcsot használva vissza is tudod nyerni az eredeti adatot. Ilyen például az RSA és az AES.

2) Egyirányú titkosítás - más néven hash-elés, aminek az a lényege, hogy a titkosítás kulcs nélkül történik, de ezáltal az eredeti adatot soha nem kapod vissza. Ilyen például a CRC, az MD5 és az SHA-1/256/512.


Mindkét változat esetében nyilvánosan ismert az algoritmus, tehát az adatot úgy kell tudnia titkosítani az algoritmusnak, hogy a használt algoritmus ismeretében se érje meg feltörni a rendszert.


Nekünk az egyirányú módszer az érdekes. Úgy működik az elképzelésünk ugyanis, hogy a titkosítandó adatból egy algoritmus egy számot generál, például az "apple" szóhoz a 32-t kapod, vagy a "pear"-hoz a 81-et. A módszer biztonsága függ attól, hogy mekkora a legnagyobb hozzárendelhető szám - ha például a legkisebb érték a 0 és a legnagyobb a 10, akkor nagyon hamar előfordulhat az az eset, hogy az algoritmus az "apple" és a "pear" szavakra ugyanúgy 5-öt ad eredményül - tehát a programodba minden olyan jelszóval be lehet lépni, amire a titkosító algoritmus ugyanazt a számot adja eredményül. Mint bizonyára kitaláltad, mindig lehet ilyen bemenetpárokat találni, aminek ugyanaz az eredménye. A biztonság tehát nem azt jelenti, hogy a rendszer feltörhető-e vagy sem - mert mindig feltörhető. Sokkal inkább az a lényeg, hogy a titkosításhoz használt algoritmus ismeretében nagyobb nyereséghez jutunk-e a rendszer feltörése után, mint amennyi költséget a rendszer feltörésébe fektetünk be.


Ha jelszót tárolsz, valójában a programod számára teljesen felesleges az eredeti jelszó, jelen esetben az "apple". Bőven elég helyette az a két információ, hogy mi az eredeti jelszó hash-e és milyen módszerrel hash-elted. Ezt a két információt nyugodtan tárolhatod egymás mellett. Azért van szükségünk az egyirányú titkosításra, mert a jelszavainkat tároló adatbázist sikeresen fel fogják törni, a tárolt jelszavaink ki fognak kerülni, ezért fejlesztőként nem tárolhatjuk magukat a jelszavakat, mert az azonnali hozzáférést ad a támadónak. Ugyanakkor ez a módszer önmagában még mindig nem biztonságos, ha érdekel, miért és hogyan lehet még biztonságosabb, ezt a cikket olvasd el:

[link]


Mindez Python-ban valahogy így néz ki:

#!coding: utf-8

import hashlib


def check_password(hashed_value, user_input, hash_method):

.. hash_calc = None

..

.. if hash_method == 'SHA-512':

.. .. hash_calc = hashlib.new('sha512')

.. #elif-fel vehetsz fel más módszereket

.. else:

.. .. return False #semmilyen specifikus hibaüzenet nem jelenhet meg a jelszót illetően!

.. ..

.. hash_calc.update(user_input)

.. return hash_calc.hexdigest().upper() == hashed_value.upper()


password = 'A336F671080FBF4F2A230F313560DDF0D0C12DFCF1741E49E8722A234673037DC493CAA8D291D8025F71089D63CEA809CC8AE53E5B17054806837DBE4099C4CA'

hash_method = 'SHA-512'


user_input = 'mypassword' #ezt írta be a felhasználó


if (check_password(password, user_input, hash_method)):

.. print 'Successfully logged in'

.. #pro tip: ha közben áttértél egy új titkosító módszerre (mert mondjuk kiderült, hogy az SHA-512 már nem biztonságos), ezen a ponton újra tudod hash-elni a felhasználó jelszavát az új módszerrel - ezért kell mindig tárolni, hogy melyik hash algoritmust használtad

else:

.. print 'Wrong username or password'

2019. márc. 16. 00:47
Hasznos számodra ez a válasz?
 6/13 anonim ***** válasza:
14%

Utolsó: amíg a kérdező ilyen hányás kódot ír, kár ezt a titkosítás témát erőltetni.


Kérdező,a kódod lefut gond nélkül 3.6.5-ös Python alatt, egy kicsit átírtam mert ez így elég ocsmány.

Így fél fokkal tűrhetőbb és értelmesebb is.

[link]


Kizárólag angol változóneveket használj, így mixelni a magyart meg az angolt borzalmas.

2019. márc. 16. 15:24
Hasznos számodra ez a válasz?
 7/13 anonim ***** válasza:

"Így fél fokkal tűrhetőbb és értelmesebb is."


Igen, így áttekinthetőbb. Apró szépséghibája, hogy ha 3x rossz kódot írnak be, akkor a 4x is bekéri a jelszót, és utána rögtön kiírja, hoghy System closed!


:)

2019. márc. 16. 19:07
Hasznos számodra ez a válasz?
 8/13 anonim ***** válasza:
Jogos, a tries-t emiatt 1-ről kell kezdeni és nem 0-ról.
2019. márc. 16. 19:43
Hasznos számodra ez a válasz?
 9/13 anonim ***** válasza:

Vagy elég a tries += 1-et az if tries == 3: elé tenni és akkor már indítható 0-ról, előbb növeli, aztán fut le minden vizsgálat. Ez így még logikusabb is.

Jól megbeszéltem magammal.

2019. márc. 16. 19:46
Hasznos számodra ez a válasz?
 10/13 A kérdező kommentje:
köszönöm azoknak akik segítettek !
2019. márc. 16. 20:43
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!