TAG | Python
432 viewsHere is a slimmed down version of my PHP Beale Cipher Decoder script using Python. Usage is pretty straight forward.
#
# Beale Decoder using Python
# Copyright 2009 Travis Crowder
# Published under the MIT License
#
class Beale(object):
def __init__(self):
self.__ciphers = []
self.__ciphers.append([71, 194, 38, 1701, 89, 76, 11, 83, 1629, 48, 94, 63, 132, 16, 111,
95, 84, 341, 975,14, 40, 64, 27, 81, 139, 213, 63, 90, 1120, 8, 15,
3, 126, 2018, 40, 74, 758, 485,604, 230, 436, 664, 582, 150, 251,
284, 308, 231, 124, 211, 486, 225, 401, 370,11, 101, 305, 139, 189,
17, 33, 88, 208, 193, 145, 1, 94, 73, 416, 918, 263, 28, 500,538,
356, 117, 136, 219, 27, 176, 130, 10, 460, 25, 485, 18, 436, 65,
84, 200, 283,118, 320, 138, 36, 416, 280, 15, 71, 224, 961, 44, 16,
401, 39, 88, 61, 304, 12, 21,24, 283, 134, 92, 63, 246, 486, 682,
7, 219, 184, 360, 780, 18, 64, 463, 474, 131,160, 79, 73, 440, 95,
18, 64, 581, 34, 69, 128, 367, 460, 17, 81, 12, 103, 820, 62,116,
97, 103, 862, 70, 60, 1317, 471, 540, 208, 121, 890, 346, 36, 150,
59, 568,614, 13, 120, 63, 219, 812, 2160, 1780, 99, 35, 18, 21,
136, 872, 15, 28, 170, 88, 4,30, 44, 112, 18, 147, 436, 195, 320,
37, 122, 113, 6, 140, 8, 120, 305, 42, 58, 461,44, 106, 301, 13,
408, 680, 93, 86, 116, 530, 82, 568, 9, 102, 38, 416, 89, 71, 216,
728, 965, 818, 2, 38, 121, 195, 14, 326, 148, 234, 18, 55, 131,
234, 361, 824, 5,81, 623, 48, 961, 19, 26, 33, 10, 1101, 365, 92,
88, 181, 275, 346, 201, 206, 86,36, 219, 324, 829, 840, 64, 326,
19, 48, 122, 85, 216, 284, 919, 861, 326, 985,233, 64, 68, 232,
431, 960, 50, 29, 81, 216, 321, 603, 14, 612, 81, 360, 36, 51, 62,
194, 78, 60, 200, 314, 676, 112, 4, 28, 18, 61, 136, 247, 819, 921,
1060, 464, 895,10, 6, 66, 119, 38, 41, 49, 602, 423, 962, 302, 294,
875, 78, 14, 23, 111, 109, 62,31, 501, 823, 216, 280, 34, 24, 150,
1000, 162, 286, 19, 21, 17, 340, 19, 242, 31,86, 234, 140, 607,
115, 33, 191, 67, 104, 86, 52, 88, 16, 80, 121, 67, 95, 122, 216,
548, 96, 11, 201, 77, 364, 218, 65, 667, 890, 236, 154, 211, 10,
98, 34, 119, 56,216, 119, 71, 218, 1164, 1496, 1817, 51, 39, 210,
36, 3, 19, 540, 232, 22, 141, 617,84, 290, 80, 46, 207, 411, 150,
29, 38, 46, 172, 85, 194, 39, 261, 543, 897, 624, 18,212, 416, 127,
931, 19, 4, 63, 96, 12, 101, 418, 16, 140, 230, 460, 538, 19, 27,
88,612, 1431, 90, 716, 275, 74, 83, 11, 426, 89, 72, 84, 1300,
1706, 814, 221, 132,40, 102, 34, 868, 975, 1101, 84, 16, 79, 23,
16, 81, 122, 324, 403, 912, 227, 936,447, 55, 86, 34, 43, 212, 107,
96, 314, 264, 1065, 323, 428, 601, 203, 124, 95, 216,814, 2906,
654, 820, 2, 301, 112, 176, 213, 71, 87, 96, 202, 35, 10, 2, 41,
17, 84,221, 736, 820, 214, 11, 60, 760])
self.__ciphers.append([115, 73, 24, 807, 37, 52, 49, 17, 31, 62, 647, 22, 7, 15, 140, 47,
29, 107, 79, 84, 56, 239, 10, 26, 811, 5, 196, 308, 85, 52, 160,
136, 59, 211, 36, 9, 46, 316, 554, 122, 106, 95, 53, 58, 2, 42, 7,
35, 122, 53, 31, 82, 77, 250, 196, 56, 96, 118, 71, 140, 287, 28,
353, 37, 1005, 65, 147, 807, 24, 3, 8, 12, 47, 43, 59, 807, 45, 316,
101, 41, 78, 154, 1005, 122, 138, 191, 16, 77, 49, 102, 57, 72, 34,
73, 85, 35, 371, 59, 196, 81, 92, 191, 106, 273, 60, 394, 620, 270,
220, 106, 388, 287, 63, 3, 191, 122, 43, 234, 400, 106, 290, 314,
47, 48, 81, 96, 26, 115, 92, 158, 191, 110, 77, 85, 197, 46, 10,
113, 140, 353, 48, 120, 106, 2, 607, 61, 420, 811, 29, 125, 14, 20,
37, 105, 28, 248, 16, 159, 7, 35, 19, 301, 125, 110, 486, 287, 98,
117, 511, 62, 51, 220, 37, 113, 140, 807, 138, 540, 8, 44, 287, 388,
117, 18, 79, 344, 34, 20, 59, 511, 548, 107, 603, 220, 7, 66, 154,
41, 20, 50, 6, 575, 122, 154, 248, 110, 61, 52, 33, 30, 5, 38, 8,
14, 84, 57, 540, 217, 115, 71, 29, 84, 63, 43, 131, 29, 138, 47, 73,
239, 540, 52, 53, 79, 118, 51, 44, 63, 196, 12, 239, 112, 3, 49, 79,
353, 105, 56, 371, 557, 211, 515, 125, 360, 133, 143, 101, 15, 284,
540, 252, 14, 205, 140, 344, 26, 811, 138, 115, 48, 73, 34, 205,
316, 607, 63, 220, 7, 52, 150, 44, 52, 16, 40, 37, 158, 807, 37,
121, 12, 95, 10, 15, 35, 12, 131, 62, 115, 102, 807, 49, 53, 135,
138, 30, 31, 62, 67, 41, 85, 63, 10, 106, 807, 138, 8, 113, 20, 32,
33, 37, 353, 287, 140, 47, 85, 50, 37, 49, 47, 64, 6, 7, 71, 33, 4,
43, 47, 63, 1, 27, 600, 208, 230, 15, 191, 246, 85, 94, 511, 2270,
20, 39, 7, 33, 44, 22, 40, 7, 10, 3, 811, 106, 44, 486, 230, 353,
211, 200, 31, 10, 38, 140, 297, 61, 603, 320, 302, 666, 287, 2, 44,
33, 32, 511, 548, 10, 6, 250, 557, 246, 53, 37, 52, 83, 47, 320, 38,
33, 807, 7, 44, 30, 31, 250, 10, 15, 35, 106, 160, 113, 31, 102,
406, 230, 540, 320, 29, 66, 33, 101, 807, 138, 301, 316, 353, 320,
220, 37, 52, 28, 540, 320, 33, 8, 48, 107, 50, 811, 7, 2, 113, 73,
16, 125, 11, 110, 67, 102, 807, 33, 59, 81, 158, 38, 43, 581, 138,
19, 85, 400, 38, 43, 77, 14, 27, 8, 47, 138, 63, 140, 44, 35, 22,
177, 106, 250, 314, 217, 2, 10, 7, 1005, 4, 20, 25, 44, 48, 7, 26,
46, 110, 230, 807, 191, 34, 112, 147, 44, 110, 121, 125, 96, 41, 51,
50, 140, 56, 47, 152, 540, 63, 807, 28, 42, 250, 138, 582, 98, 643,
32, 107, 140, 112, 26, 85, 138, 540, 53, 20, 125, 371, 38, 36, 10,
52, 118, 136, 102, 420, 150, 112, 71, 14, 20, 7, 24, 18, 12, 807,
37, 67, 110, 62, 33, 21, 95, 220, 511, 102, 811, 30, 83, 84, 305,
620, 15, 2, 108, 220, 106, 353, 105, 106, 60, 275, 72, 8, 50, 205,
185, 112, 125, 540, 65, 106, 807, 188, 96, 110, 16, 73, 33, 807,
150, 409, 400, 50, 154, 285, 96, 106, 316, 270, 205, 101, 811, 400,
8, 44, 37, 52, 40, 241, 34, 205, 38, 16, 46, 47, 85, 24, 44, 15, 64,
73, 138, 807, 85, 78, 110, 33, 420, 505, 53, 37, 38, 22, 31, 10,
110, 106, 101, 140, 15, 38, 3, 5, 44, 7, 98, 287, 135, 150, 96, 33,
84, 125, 807, 191, 96, 511, 118, 440, 370, 643, 466, 106, 41, 107,
603, 220, 275, 30, 150, 105, 49, 53, 287, 250, 208, 134, 7, 53, 12,
47, 85, 63, 138, 110, 21, 112, 140, 485, 486, 505, 14, 73, 84, 575,
1005, 150, 200, 16, 42, 5, 4, 25, 42, 8, 16, 811, 125, 160, 32, 205,
603, 807, 81, 96, 405, 41, 600, 136, 14, 20, 28, 26, 353, 302, 246,
8, 131, 160, 140, 84, 440, 42, 16, 811, 40, 67, 101, 102, 194, 138,
205, 51, 63, 241, 540, 122, 8, 10, 63, 140, 47, 48, 140, 288])
self.__ciphers.append([317, 8, 92, 73, 112, 89, 67, 318, 28, 96, 107, 41, 631, 78, 146,
397, 118, 98, 114, 246, 348, 116, 74, 88, 12, 65, 32, 14, 81, 19,
76, 121, 216, 85, 33, 66, 15, 108, 68, 77, 43, 24, 122, 96, 117, 36,
211, 301, 15, 44, 11, 46, 89, 18, 136, 68, 317, 28, 90, 82, 304, 71,
43, 221, 198, 176, 310, 319, 81, 99, 264, 380, 56, 37, 319, 2, 44,
53, 28, 44, 75, 98, 102, 37, 85, 107, 117, 64, 88, 136, 48, 154, 99,
175, 89, 315, 326, 78, 96, 214, 218, 311, 43, 89, 51, 90, 75, 128,
96, 33, 28, 103, 84, 65, 26, 41, 246, 84, 270, 98, 116, 32, 59, 74,
66, 69, 240, 15, 8, 121, 20, 77, 89, 31, 11, 106, 81, 191, 224, 328,
18, 75, 52, 82, 117, 201, 39, 23, 217, 27, 21, 84, 35, 54, 109, 128,
49, 77, 88, 1, 81, 217, 64, 55, 83, 116, 251, 269, 311, 96, 54, 32,
120, 18, 132, 102, 219, 211, 84, 150, 219, 275, 312, 64, 10, 106,
87, 75, 47, 21, 29, 37, 81, 44, 18, 126, 115, 132, 160, 181, 203,
76, 81, 299, 314, 337, 351, 96, 11, 28, 97, 318, 238, 106, 24, 93,
3, 19, 17, 26, 60, 73, 88, 14, 126, 138, 234, 286, 297, 321, 365,
264, 19, 22, 84, 56, 107, 98, 123, 111, 214, 136, 7, 33, 45, 40, 13,
28, 46, 42, 107, 196, 227, 344, 198, 203, 247, 116, 19, 8, 212, 230,
31, 6, 328, 65, 48, 52, 59, 41, 122, 33, 117, 11, 18, 25, 71, 36,
45, 83, 76, 89, 92, 31, 65, 70, 83, 96, 27, 33, 44, 50, 61, 24, 112,
136, 149, 176, 180, 194, 143, 171, 205, 296, 87, 12, 44, 51, 89, 98,
34, 41, 208, 173, 66, 9, 35, 16, 95, 8, 113, 175, 90, 56, 203, 19,
177, 183, 206, 157, 200, 218, 260, 291, 305, 618, 951, 320, 18, 124,
78, 65, 19, 32, 124, 48, 53, 57, 84, 96, 207, 244, 66, 82, 119, 71,
11, 86, 77, 213, 54, 82, 316, 245, 303, 86, 97, 106, 212, 18, 37,
15, 81, 89, 16, 7, 81, 39, 96, 14, 43, 216, 118, 29, 55, 109, 136,
172, 213, 64, 8, 227, 304, 611, 221, 364, 819, 375, 128, 296, 1, 18,
53, 76, 10, 15, 23, 19, 71, 84, 120, 134, 66, 73, 89, 96, 230, 48,
77, 26, 101, 127, 936, 218, 439, 178, 171, 61, 226, 313, 215, 102,
18, 167, 262, 114, 218, 66, 59, 48, 27, 19, 13, 82, 48, 162, 119,
34, 127, 139, 34, 128, 129, 74, 63, 120, 11, 54, 61, 73, 92, 180,
66, 75, 101, 124, 265, 89, 96, 126, 274, 896, 917, 434, 461, 235,
890, 312, 413, 328, 381, 96, 105, 217, 66, 118, 22, 77, 64, 42, 12,
7, 55, 24, 83, 67, 97, 109, 121, 135, 181, 203, 219, 228, 256, 21,
34, 77, 319, 374, 382, 675, 684, 717, 864, 203, 4, 18, 92, 16, 63,
82, 22, 46, 55, 69, 74, 112, 134, 186, 175, 119, 213, 416, 312, 343,
264, 119, 186, 218, 343, 417, 845, 951, 124, 209, 49, 617, 856, 924,
936, 72, 19, 28, 11, 35, 42, 40, 66, 85, 94, 112, 65, 82, 115, 119,
236, 244, 186, 172, 112, 85, 6, 56, 38, 44, 85, 72, 32, 47, 73, 96,
124, 217, 314, 319, 221, 644, 817, 821, 934, 922, 416, 975, 10, 22,
18, 46, 137, 181, 101, 39, 86, 103, 116, 138, 164, 212, 218, 296,
815, 380, 412, 460, 495, 675, 820, 952])
def decode(self, text, cipher):
cipher = self.__ciphers[cipher]
for cipherKey in cipher:
try:
print text[cipherKey],
except Exception, e:
pass # out of range
text = "This is a test of the emergency broadcast system. If this were an actual warning, something else would be said right about ... now!"
obj = Beale()
obj.decode(text, 0)
Here is a crude example of how to pass a parameter to the command of your Tkinter Button.
import Tkinter
def command(text):
ButtonText.set(text)
root = Tkinter.Tk()
ButtonText = Tkinter.StringVar()
ButtonText.set("Do Callback")
Tkinter.Button(root, textvariable=ButtonText, command=lambda x="Hello World!": command(x)).pack()
root.mainloop()
By default, the MySQLdb module to access a MySQL database returns the data as an integer indexed array. Sometimes this is not desirable and an associative array is preferred, such as the mysql_fetch_assoc function in PHP. In addition, we will be using the pprint module which is similar PHP’s print_r
Here is the Python equivalent:
import MySQLdb import pprint # connect to the database here db = MySQLdb.connect(...) c = db.cursor(cursorclass=MySQLdb.cursors.DictCursor) query = "SELECT `name`, `address` FROM `table`" c.execute(query) rows = c.fetchall() c.close() pprint.pprint(rows) # i.e. print_r($rows)
Hope that helps someone.
20
Python Print Screen and Save Image in Windows
0 Comments | Posted by Spechal in Python, Windows
So you need to do a “Print Screen” and save the image in the clipboard huh? I had that exact need too. Let me save you a few hours of trouble and tell you that the win32clipboard does not yet have the ability to return the contents of the clipboard when the contents are BITMAP, despite the CF_BITMAP constant.
How do you do it then? I was wondering the same thing. Behold, PIL. PIL, the Python Image Library, saved me from a massive headache.
Here is the code to take a screen shot and save it. You will need the win32api and PIL libraries.
import win32api, win32con, ImageGrab
win32api.keybd_event(win32con.VK_SNAPSHOT, 1)
im = ImageGrab.grabclipboard()
im.save("screenshot.jpg", "JPEG")
Now wasn’t that easy!
#
# Abstract Random Snow Art
# Copyright 2009 Travis Crowder
# travis.crowder@spechal.com
# Published under the MIT License
#
import pygame, sys, random
from pygame.color import THECOLORS
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([0,0,0])
for i in range(1, 2500):
top = random.randint(2, 478)
left = random.randint(2, 638)
color_name = random.choice(THECOLORS.keys())
color = THECOLORS[color_name]
pygame.draw.rect(screen, color, [left, top, 1, 1], 1)
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#
# Abstract Random Box Art
# Copyright 2009 Travis Crowder
# travis.crowder@spechal.com
# Published under the MIT License
#
import pygame, sys, random
from pygame.color import THECOLORS
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([0,0,0])
for i in range(1, 100):
width = random.randint(0, 250)
height = random.randint(0, 250)
top = random.randint(5, 435)
left = random.randint(5, 375)
color_name = random.choice(THECOLORS.keys())
color = THECOLORS[color_name]
line_width = random.randint(1,3)
pygame.draw.rect(screen, color, [left, top, width, height], line_width)
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#
# Convert Fahrenheit to Centigrade
# Copyright 2009 Travis Crowder
# travis.crowder@spechal.com
# Published under the MIT License
#
degrees = input("Enter the temperature in Fahrenheit to convert: ");
print degrees, "Fahrenheit is", (degrees - 32.0) * 5/9, "Centigrade"
#
# Guessing Game
# Copyright 2009 Travis Crowder
# travis.crowder@spechal.com
# Published under the MIT License
#
import random
secret = random.randint(1,100)
guess = 0
guesses = 0
print "Guess the secret number between 1 and 100!"
while guess != secret:
guesses = guesses + 1
guess = input("Enter your guess: ")
if guess > secret:
print "Your guess is too high. Try again!"
elif guess < secret:
print "Your guess is too low. Try again!"
else:
print "You guessed the secret in", guesses, "guesses! It was", secret
