Kod w pythonie pobiera wszystkie dowcipy ze strony hss.pl i przekształca w postać zrozumiałą dla czytknika na platformę J2ME.
piątek, 10 lipca 2009
piątek, 6 marca 2009
PyCrypto - kryptografia w Pythonie
W bibliotece standartowej Python-a brak modułu służącego do szyfrowania. Pewne nadzieje może robić moduł crypto
, lecz jest to moduł służący do łamamia haseł w Uniksie.
Na szczęście istnieje biblioteka PyCrypto pozwalająca na szyfrowanie zarówno z kluczem publicznym jak i symetryczne.
Szyfrowanie symetryczne
PyCrypto wspiera takie symetryczne algorytmy szyfrowania jak AES, Blowfish czy IDEA.
Używanie szyfrów symetrycznych jest dość proste. Przykładowo, aby zaszyfrować wiadomość przy użyciu AES:
>>> from Crypto.Cipher import AES >>> mojKlucz = '1234567890ABCEFG' >>> k = AES.new(mojKlucz) # klucz musi być ciągiem znaków i mieć długość 16, 24 lub 32 bajty. >>> enc = k.encode('wiadomosc\0\0\0\0\0\0\0') # długość wiadomości musi być podzielna przez 16 >>> enc '2\xd61:<\xcaY\xe4\x9c\x8eE\xa5!?\x1e@' >>> k.decode(enc) 'wiadomosc\0\0\0\0\0\0\0' >>>
Szyfrowanie kluczem publicznym
PyCrypto obsługuje także wszystkie znaczące algorytmy szyfrowania kluczem publicznym np.: ElGamal, RSA, DSA. Użycie tych szyfrów jest równie proste jak w przypadku kryptografi symetrycznej.
>>> from Crypto.PublicKey import RSA >>> import os >>> key = RSA.generate(2048, os.urandom) # generujemy klucz. 2048 - bity klucza, os.urandom - funkcja losowa >>> key.decrypt(key.encrypt('tekst', None)) 'tekst' >>> key.verify('tekst', key.sign('tekst', None)) True >>> key_as_tuple = [ getattr(key, name) for name in key.keydata ] # "wyciąganie" danych z klucza >>> key_copy = RSA.construct(key_as_tuple) # i mamy kopię >>> public_key = key.publickey() # klucz tylko do szyfrowania i weryfikowania >>>
Niestety RSA nie potrafi kodować dużych wiadomości (> 2kB) - należy wtedy uciec się do pomocy szyfrów symetrycznych:
-
Wylosuj klucz AES.
key = os.urandom(32) aes_key = AES.new(key)
-
Zaszyfruj klucz AES kluczem RSA.
cipher_key = rsa_key.encrypt(key)
-
Zaszyfruj wiadomość kluczem AES.
cipher_message = aes_key.encrypt(messsage)
-
Zapisz zaszyfrowany klucz i zaszyfrowaną wiadomość.
return cipher_key, cipher_message
poniedziałek, 2 marca 2009
Tworzenie własnego edytora WYSIWYG
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis massa nisi, dapibus quis, vestibulum in, ultrices viverra, elit. Nulla a justo. Vivamus ullamcorper. Vivamus justo. Nunc aliquam dui non ipsum. Nulla quam. Sed cursus. Integer tincidunt. Pellentesque sit amet lacus. Suspendisse metus neque, mattis in, ultricies id, ultrices ut, felis.
Donec luctus. Cras tristique tellus eget massa. Nullam feugiat, urna id dignissim bibendum, enim est viverra magna, ut commodo tortor ipsum eu sem. Vestibulum id libero eu nulla aliquam porttitor. Integer aliquet iaculis dui. Nam dapibus feugiat purus. Phasellus laoreet erat vitae dui. Quisque dignissim ornare tellus. Nullam eget enim. Duis tempor. Etiam volutpat. Vestibulum pretium pellentesque sapien. In volutpat mi. Nunc at lacus ac neque porttitor pharetra.
javascript:document.designMode = 'on';document.designMode
. Powoduje ona, że dokument wyświetlany w przeglądarce można po prostu edytować.
document.designMode = 'on';Przetestuj to
Stosowanie iframek
Zwykle edytory WYSIWYG nie otwierają się w nowym oknie, ale są już wstawione stronę. Niestety właściwość designMode moży być używana jedynie w odniesienu do całego dokumentu. W tym przypadku z pomocą przychodzą iframki z ich właściwością contentWindow. Wystarczy utworzyć taką pływającą ramkę.
<iframe id="iframka" onload = "document.getElementById('iframka').contentWindow.document.designMode = 'on';" />
Formatowanie
Niestety przeglądarki nie zawierają paska narzędzi, który umożliwiałby formatowanie tekstu. Istnieje jednak metodaexecCommand(operacja, false, argument)
obiektu document
która pozwala operować na zaznaczeniu. Pierwszy argument to nazwa komendy która ma zostać wykonana np. "bold"
czy "createlink"
. Drugi to zawsze fałsz. Trzeci to argument to parametr taki jak adres linku czy kolor czcionki. Większość poleceń wymaga podania null
. W umieszczonej tabeli znajduję się skrócony opis komend dla tej funkcji. "Pełną wersję" można znaleźć na stronie http://www.quirksmode.org/dom/execCommand.html.
Polecenie | Argument | Opis |
---|---|---|
bold | null |
Pogrubia tekst |
backcolor | kolor | Zmienie podświetlenie tekstu (w firefoxie użyj hilitecolor) |
Przykład
<a onclick="document.getElementById('iframka2').contentWindow.document.execCommand('bold', false, null);" href="javascript:void(0)">Bold</a> <a href="javascript:void(0)" onclick="alert(document.getElementById('iframka2').contentWindow.document.body.innerHTML)">Pokaż HTML</a> <a href="javascript:void(0)" title="Użyj do testowania komend" onclick="document.getElementById('iframka2').contentWindow.document.execCommand(prompt('Nazwa komendy'), false, prompt('Argument (lub anuluj dla null)'));">execCommand</a> <br /> <iframe id="iframka2" onload="document.getElementById('iframka2').contentWindow.document.designMode='on'; document.getElementById('iframka2').contentWindow.document.body.innerHTML='trochę tekstu'"></iframe>
sobota, 28 lutego 2009
Pobieranie filmów/muzyki z youtube.com
- youtube-dl (napisany w Pythonie)
- ffmpeg
sudo apt-get install ffmpeg youtube-dl
Należy pamiętać, aby dodać
repozytorium medibuntu
youtube-dl http://youtube.com/watch?v=id -o /tmp/plik.flv
Jeżeli chcemy wyciągnąć muzykę np. z teledysku wpisujemy:
ffmpeg -i /tmp/plik.flv moja-muzyka.mp3
Aby stworzyć film w formacie czytanym przez większość odtwarzaczy konwertujemy go do AVI:
ffmpeg -i /tmp/plik.flv mój-film.avi
W podobny sposób możemy konwertować filmy do wielu formatów poprzez dodanie odpowiedniego rozszerzenia (np. film na komórkę to .3gp)
poniedziałek, 19 stycznia 2009
Automatyczne pobieranie plików z wrzucaj.com
import urllib
def getDownloadURL(id):
"zwraca jednorazowe URL do pobrania pliku"
url='http://www.wrzucaj.com/'+id
out=urllib.urlopen(url).read()
index=out.find('innerHTML = \'<a href="')
if index==-1:
raise Exception("URL not found")
index+=len('innerHTML = \'<a href="')
data=out[index:]
index=data.find('">')
if index==-1:
raise Exception("Cannot found end of url")
return data[:index]
def downloadFile(id):
"Zwraca zawartość pliku"
return urllib.urlopen(getDownloadURL(id)).read()
Aby pobrać adres pliku o id
id
: getDownloadURL(id)
Aby pobrać ten plik:
downloadFile(id)
Pobierz kod
sobota, 17 stycznia 2009
Przyśpieszacz wrzucaj.com (UserJS)
Pobierz skrypt
// ==UserScript==
// @name wrzucaj.pl accelestator
// @namespace http://zielmicha.blogspot.com
// @description Nie trzeba czekać na ściągnięcie pliku z wrzucaj.com.
// @include http://*wrzucaj.com/*
// @exclude http://*wrzucaj.com
// @exclude http://*wrzucaj.com/
// @exclude http://*wrzucaj.com/upload.php
// @exclude http://*wrzucaj.com/*del*
// ==/UserScript==
code="for(var i=0;i<40;i++)countdown();";
setTimeout(0, code);