šifra – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

šifra – Python – Fórum – Programujte.comšifra – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
selkir0
Stálý člen
24. 6. 2008   #1
-
0
-

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

Nahlásit jako SPAM
IP: 78.108.102.–
"Je lépe mlčet a být považován za blázna, než promluvit a odstranit tak všechny pochyby." [br] Abraham Lincoln [br] [br]"I cesta na stovky mil začíná prvním krokem"
Reklama
Reklama
Spectator0
Věrný člen
25. 6. 2008   #2
-
0
-

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

Nahlásit jako SPAM
IP: 89.24.4.–
. . .
Osiris0
Stálý člen
25. 6. 2008   #3
-
0
-

To selkir : Úplně jednoduchá šifra se dá udělat pomocí operátoru XOR.

sifra = znak XOR klic
znak = sifra XOR klic

Nahlásit jako SPAM
IP: 85.70.130.–
pawlik0
Grafoman
25. 6. 2008   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
Quiark0
Věrný člen
25. 6. 2008   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 89.102.4.–
maral
~ Redaktor
0
Newbie
25. 6. 2008   #6
-
0
-

Ehm.. Jak se pouziva operator XOR?

Nahlásit jako SPAM
IP: 85.132.176.–
pawlik0
Grafoman
25. 6. 2008   #7
-
0
-

Myslím že

sifra = znak ^ klic

Zkus.

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
selkir0
Stálý člen
25. 6. 2008   #8
-
0
-

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.

Nahlásit jako SPAM
IP: 78.108.102.–
"Je lépe mlčet a být považován za blázna, než promluvit a odstranit tak všechny pochyby." [br] Abraham Lincoln [br] [br]"I cesta na stovky mil začíná prvním krokem"
Spectator0
Věrný člen
26. 6. 2008   #9
-
0
-

To selkir : Vnořené seznamy nejspíš



s1=[1,2,3]
s2=[9,8,7]
z=[s1,s2]
z[1][0]
>>>9

Nahlásit jako SPAM
IP: 89.24.4.–
. . .
selkir0
Stálý člen
27. 6. 2008   #10
-
0
-

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.

Nahlásit jako SPAM
IP: 78.108.102.–
"Je lépe mlčet a být považován za blázna, než promluvit a odstranit tak všechny pochyby." [br] Abraham Lincoln [br] [br]"I cesta na stovky mil začíná prvním krokem"
selkir0
Stálý člen
27. 6. 2008   #11
-
0
-

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)

Nahlásit jako SPAM
IP: 78.108.102.–
"Je lépe mlčet a být považován za blázna, než promluvit a odstranit tak všechny pochyby." [br] Abraham Lincoln [br] [br]"I cesta na stovky mil začíná prvním krokem"
Danielp
~ Anonymní uživatel
4 příspěvky
27. 6. 2008   #12
-
0
-

..dobrej programátor si s odšifrováním poradí..

:smile1:

to mas jiste pravdu ale ono si stim poradi i prumerny 9lety dite (bez prevodni tabulky a PC)

Nahlásit jako SPAM
IP: 194.213.32.–
Spectator0
Věrný člen
27. 6. 2008   #13
-
0
-

To selkir : nejaky obnovovani po urc. case je treba v Tkinteru:

after(ms,fce)
....................

Nahlásit jako SPAM
IP: 89.176.112.–
. . .
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

Podobná vlákna

Šifra — založil Jane Sheppard

Vigenerova šifra — založil jarda kužel

Vigenerova šifra — založil cedric

Caesarova šifra — založil Luk33

MD5 šifra - ??? — založil Tocimanko

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý