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 algoritmitif 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 hashinglö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.