Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 3714
Hei, driver å leker litt med python og har laget ett lite krypterings program...

Kode

import hashlib
import getpass

class login():
    def __init__(self, userData=None):
        if userData is not None:
            self.userData = userData;

    def md(self, string):
        return hashlib.sha224(string).hexdigest();

    def login(self):
        userName = raw_input("Username: ");
        passWord = getpass.getpass("Password: ");

        dataStream = open(userData);

        for i in dataStream.readlines():
            if md(username+password.split("\n")[0]) == i:
                return 1;
        print "Invalid Credentials";
        return 0;

    def makeLogin(self):
        print "New user"
        userName = raw_input("Username: ");
        passWord = raw_input("Password: ");
        dataStream = open(userData, "w");
        dataSteam.writelines(md(username+password))
        print "New User Successful."
Det har for øyeblikket ikke noe serlig funksjonalitet.. men var artig å leke med

Det jeg har lyst å prøve nå.. Som står i tittelen er noe ala dette..


Hvis jeg skrive inn "Hei, Jeg heter Stein-Bollemus"

Så kommer dette ut noe Skrudd på tryne..

Tenke f.eks noe ala dette

Array_Input = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

Array_Code = ['26', '85', '71', '28', '//', '6g', '59', 'HN', 'pq', '1t', '*/', 'b1', 'qp', 'aa', 'jn', '0&', '62', 'pq', '\\', '/\', '/\', '*/', '\*', '*\', 'q7', '2j']

Og en måte å gjøre det tilbake på.

Hvis dere skjønner.. Dette har vell et eget navn men vet ikke hva det er annet en "spion skrift" fra donald duck x)


Må vell ta inn stringen, splitte den ned til hver enkelt character.. Sjekke for ugyldige.. Sette disse i et array.. Lese arrayet og for hver lesning finner den ut hva som er der.. og i samme posisjon i Array_Code og setter den til Array_Output.. Så sette Array_Output sammen etc etc..?


Men hva skal jeg så gjøre med mellomrom?


Danke Schön
Sur og sarkastisk
droppboks's Avatar
Du må splitte på hver andre karakter for å snu den tilbake, har akkurat begynt i Python selv så vet ikke om en funksjon for det... men du kan jo alltids se om du finner noe RegEx greier om ingen andre har svar.
Carrots for Fun!
darkslayer322's Avatar
Trådstarter
Å splitte den første strengen er jo greit.. Er bare å kjøre f.eks

Kode

 
>>> line = "ostepop i rompa smaker godt"
>>> list(line)
['o', 's', 't', 'e', 'p', 'o', 'p', ' ', 'i', ' ', 'r', 'o', 'm', 'p', 'a', ' ', 's', 'm', 'a', 'k', 'e', 'r', ' ', 'g', 'o', 'd', 't']
Den andre kan jo dette funke..

Kode

>>>line = "26857128//g6d46f/*"
>>>n = 2
>>> [line[i:i+n] for i in range(0, len(line), n)]
['26', '85', '71', '28', '//', 'g6', 'd4', '6f', '/*']
Vet ikke helt hvordan jeg skal løse det med mellomrom da :/
Sist endret av darkslayer322; 18. november 2013 kl. 10:49.
Sjekk ut str.translate()
Den høres ut som det du trenger. Tegn som ikke er i intab vil ikke modifiseres.

Edit: Om du ikke på død og liv ønsker at hvert tegn skal bli til to nye tegn da. Da kan du bruke en dict for å slå opp hvilken bokstav som hører til hvilken.
Sist endret av Dyret; 18. november 2013 kl. 11:09.
Du trenger ikke tenke så komplisert, du kan f.eks bruke maketrans og translate. Her er et kjapt eksempel:

Kode

from string import maketrans
foo = maketrans("abc","ABC")
bar = "xBd"

print bar.translate(foo)
Carrots for Fun!
darkslayer322's Avatar
Trådstarter
Men som jeg skjønner det kan ikke maketrans gjøre feks A til 77 men kan gjøre A til 7....
En av de eldste og kuleste krypteringsalgoritmene er http://en.wikipedia.org/wiki/Caesar_cipher. Den forskyver bare alphabetet en "nøkkel" antall ganger til høyre, og bruker det som alphabet. Implementert i Python, blir det

Kode

def caesarcipher(string, key, krypter=True):
	from string import ascii_lowercase, ascii_uppercase
	alpha = list(ascii_lowercase+ascii_uppercase)
	return ''.join([alpha[(alpha.index(char)-key)%len(alpha)] for char in string]) if krypter else ''.join([alpha[(alpha.index(char)+key)%len(alpha)] for char in string])
Sitat av darkslayer322 Vis innlegg
Men som jeg skjønner det kan ikke maketrans gjøre feks A til 77 men kan gjøre A til 7....
Vis hele sitatet...
det kan den vel heller ikke såvidt jeg leste. da kan du alternativt gjøre noe slikt

Kode

foo = {'a': 'xx', 'b': 'yy'}

input = "penis"
output = ""
for n in input:
    output += foo.get(n)
print output
Sist endret av liasis; 18. november 2013 kl. 23:03.
Men som jeg skjønner det kan ikke maketrans gjøre feks A til 77 men kan gjøre A til 7....
Vis hele sitatet...

HTML-kode

>>> from string import maketrans
>>> help(maketrans)
"The strings frm and to must be of the same length"
String må ha samme lengde,så da blir det og skrive noe i stilen moridin/Dyret foreslår og bruke dictionary.
foo.get(n) må vel være foo.get(n, n) når man looper over teksten.

Kode

def crypt(text, code):
    result = ""
    for c in text:
        result += code.get(c, c)
    return result

code = {'a':'7', 'b':'8', '7':'a', '8':'b'}
text = 'abba abba'

encrypted = crypt(text, code)
decrypted = crypt(encrypted , code)
print '{} --> {}'.format(encrypted, decrypted) #7887 7887 --> abba abba
Med 1 tegn går det greit og gå fram og tilbake,dobler man til 2 tegn 77/88 ryker denne.
Men du får vel en idèe om hvordan dette kan løses.
Det er litt mer knotete når man går opp til 2 tegn,men er rimelig greit og få til.
Sikkerheten blir jo dobbelt når man bruker 2 tegn eller...
Se litt på PEP-8,store bokstaver bruker man nesten bare i klasse navn.
Sist endret av snippsat; 20. november 2013 kl. 17:47.