Moi, olen juuri aloittanut ohjelmoinnin tänään ja saanut tapella tän ongelman kanssa koko yön. Elikkäs ongelmana on tämä, että olen rakentanut tälläisen pienen koodin joka salaa salasanat (Pastebin: http://pastebin.com/ZZdYFmDd) ohjelma ei anna mitään arvoa syötetyillä komennoilla. Huomasin kyllä jos otan if-komentojen kohalla print:eistä sisällytykset pois ohjelma toimii, mutta antaa kaikilla mahdollisilla salauksilla kyseisen salasanan. Veikkaampa, että olen mennyt tekemään jonkun alottelijan mokan tässä ohjelmassa.
Kiitos kovasti avusta.
import hashlib MD5 = hashlib.md5() # perässä muut algoritmit print('Algoritmityypit: MD5, SHA1, SHA224, SHA256, SHA384, SHA512') hashtype = input('Anna algoritmityyppi jota haluat käyttää: ') passwd = input('Anna salasana jonka haluat salata: ') if hashtype == MD5: MD5.update(passwd) print (MD5.hexdigest()) # perässä muut algoritmit
if hashtype == 'MD5':
eli lainausmerkit puuttuvat.
tai sitten jotain tämän kaltaista
import hashlib allowed = ['MD5','SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512'] hashtype = input('Anna algoritmityyppi jota haluat käyttää: ') passwd = input('Anna salasana jonka haluat salata: ') # tässä kohtaa tarkista että hashtype löytyy allowed taulukosta tai hashlib.algorithms:sta (sisältää kaikki kirjaston tukemat algoritmit) h = hashlib.new(hashtype) h.update(passwd) print(h.hexdigest())
kiitos avusta. eikä aikaan kun ajauduin uudestaan ongelmiin ja tällä kertaa pitäisi saada muutettua nuo arvot unicodeksi ennekuin pystyn tulostaa arvon.
tällästä väittää nytten:
Traceback (most recent call last): File "/home/krtsaa/workspace/passwordToHash/passtohash.py", line 19, in <module> h.update(passwd) TypeError: Unicode-objects must be encoded before hashing
löysin jo, että miten sen saisin muutettua:
passwd.encode('utf-8')
mutta en tiedä mihin lauseke kuuluisi sijoittaa. olen yrittänyt sijoittaa sitä moneen eri paikkaan, mutta ei tunnu sopivan siltikään.
kiitos vielä kerran avusta.
Lisäys:
ja tällä kertaa toteutus tällä tavalla:
allowed = ['MD5','SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512'] if hashtype == allowed: h = hashlib.new(hashtype) h.update(passwd) print(h.hexdigest())
ei valita unicodesta, mutta ei tulosta mitään. jatkaa vaan suoraa
time.sleep(5.5)
kohtaan
krtsaa kirjoitti:
löysin jo – – passwd.encode('utf-8') – – mutta en tiedä mihin lauseke kuuluisi sijoittaa.
Virheilmoituksessa näkyy rivi, jolla virhe on. Sinun pitää vaihtaa kyseiseltä riviltä passwd:n tilalle passwd.encode("UTF-8"). Funktiokutsu ei muuta alkuperäistä muuttujaa mitenkään vaan palauttaa aivan uuden arvon:
x = "abcåäö" print(x) # Teksti. print(x.encode("UTF-8")) # Enkoodattu arvo. print(x) # Teksti, aivan kuten alussa.
Ja tässähän nimenomaan ei muuteta arvoa unicodeksi vaan päinvastoin unicode-teksti enkoodatuksi tavujonoksi.
krtsaa kirjoitti:
if hashtype == allowed:
Tarkistat, onko hashtype sama kuin allowed – ei tietenkään ole, koska hashtype on teksti ja allowed on lista. Sinun pitäisi tarkistaa in-operaattorilla, onko hashtype allowed-listan jäsen. Jos ei ole erityistä syytä rajata algoritmeja vain tiettyihin, voisit kyllä käyttää suoraan listaa hashlib.algorithms_available.
Sinun kannattaisi selvästi lukea Python-opas.
kiitos vastauksesta. luenpan uudestaa python oppaan ja kirjan mikä minulla on. sain nytten ohjelman toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.