Ahoj,
chtěl bys se zeptat jak nějak šikovně udělat prográmek na šifry.
Představuju si to asi takhle:
Program bude chtít zadat po uživateli text a ten potom zakóduje.
Zní to fajn, ale mám jeden problém. Nevím jak efektivně udělat šifrování. Zkoušel jsem pár věcí,ale buď to nebralo český znaky nebo to bylo příliš složitý (prostě nepěkný) na napsání.
Tak bych chtěl jen naznačit přes co by to bylo nejvhodnější. Jestli nějakej seznam jako jsem to zkoušel já a kombinovat to s funkcemi na šifrování a pak vypsání (není příliš efektivní) nebo nějak jinak. Hlavní problém mám se samotným principem šifrování. Nejjednodušší (ale vcelku k ničemu) je převést znak na jeho ascii číslo k němu přičíst nějaké předem dané číslo a převést zpátky. Ovšem nastávají problémy s tím jak jsou znaky v ascii zapsaný, takže v šifře se vyskytují třeba závorky a to se mi nelíbí. Pak jsem zkoušel seznam a nějak různě ho převracet, ale taky nic moc.
Tak jestli byste někdo byl od tý dobroty a jen naznačil jak na to. Jde mi jen o náznak principu.
Předem díky
Fórum › Python
šifra
Kryptografie je složitá věda a matematika, než vyrábět vlastní algoritmy, podíval bych se do dokumentace Pythonu, přesněji na moduly hashlib, sha,md5...
Samozřejmě můžeš si nějakou jednoduchou šifru vytvořit sám, ale nejspíš nebude dosahovat takové kvality.
Zatím zdar
To selkir : Záeží na to, na co bude. Pokud budeš uchovávat informace o ilegálních jaderných elektrárnách v čr, tak bych tu kryptografii trochu více prozkoumal. Pokud to bude proti PC lamám, zkus XOR nebo... base64 apod.
Asi tak, šifrování je v současnosti vyřešený problém a existují na to sofistikované algoritmy. Pokud je to jen na hraní, tak by ten XOR mohl stačit. Pokud vymyslíš něco jiného a poleze ti z toho proud binárních dat, dá se to převést na ascii znaky pomocí knihovny base64.
A jinak: hashlib, md5, sha -- ani jeden z nich není šifrovací algoritmus, jsou to jen hashe.
To Quiark :
Taky jsem netušil jak se používá tenhle operátor tak jsem to zkusil jinak:
# -*- coding: cp1250 -*-
import random
def nacteni_hodnot():
vstup=list(raw_input("Zadej text: "))
return vstup
def opakovani(volba):
if volba=="yes":
sifrovani(nacteni_hodnot())
else:
exit
def sifrovani(seznam):
x=0
#z=0
#pozice=0
#seznam_data=[]
abeceda=["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"]
delka_abecedy=len(abeceda)
if " " <> seznam:
#for i in seznam:
#mezikrok=seznam[z]
#seznam_data.append(mezikrok)
#z=z+1
for i in seznam:
zasifrovani=random.randint(0,delka_abecedy)
#seznam_data.insert(pozice,zasifrovani)
seznam[x]=abeceda[zasifrovani]
x=x+1
#pozice=pozice+2
y=0
for i in seznam:
print seznam[y],
y=y+1
print "\n"
#y=0
#for i in seznam_data:
#print seznam_data[y],
#y=y+1
#print "\n"
volba=raw_input("Chcete pokračovat? (yes/no) ")
print "\n"
opakovani(volba)
sifrovani(nacteni_hodnot())
Ale má to jeden háček a to ten náhodný výběr. Není to ono. Tak mi napadla jiná možnost. Podporuje Python vícerozměrné seznamy? Jestli ano jak se deklaruje, jestli ne co použit místo toho.
To Spectator :
Tak program jsem zdárně dokončil nakonec i bez užití operátoru xor a bez vnořených sezamů. Ale přesto bych potřeboval ještě jednu radu. Nemůžu si vzpomenout na funkci, která by odčítala čas. Jako např. od 6s do nuly. Tak kdybyste mi ji někdo mohl připomenout byl bych rád.
Ještě sem vložím logickou část programu, přeci jen kdyby to někdy někdo potřeboval tak ať se s tím nemusí psát znovu.
Vložím jen logiku zašifrování, myslím, že dobrej programátor si s odšifrováním poradí a nebo mě může kontaktovat.
vstup=list(raw_input("Zadej text: "))
def sifrovani(seznam):
x=0
zasifrovany_seznam=[]
abeceda=["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",".",",",";","?","!"," "]
sifra=["s","p","h","k","i","l","m","q","r","w","v","u","j","o","e","d","t","x","n","y","z","g","f","a","b","c",".",",",";","?","!"," "]
if " " <> seznam:
for i in seznam:
mezikrok=seznam[x]
z=0
for i in abeceda:
pismeno_abecedy=abeceda[z]
if pismeno_abecedy==mezikrok:
zasifrovany_seznam.append(sifra[z])
z=z+1
x=x+1
y=0
for i in zasifrovany_seznam:
print zasifrovany_seznam[y],
y=y+1
sifrovani(vstup)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
MD5 šifra - ??? — založil Tocimanko
Césarova šifra — založil Radek
Ceasarova šifra — založil Montezo
Šifra program — založil Miko
Moderátoři diskuze