| import rijndael␊ |
| import base64␊ |
| # source http://stackoverflow.com/a/8232171/195722␊ |
| KEY_SIZE = 16␊ |
| BLOCK_SIZE = 32␊ |
| ␊ |
| def encrypt(key, plaintext):␊ |
| padded_key = key.ljust(KEY_SIZE, '\0')␊ |
| padded_text = plaintext + (BLOCK_SIZE - len(plaintext) % BLOCK_SIZE) * '\0'␊ |
| ␊ |
| # could also be one of␊ |
| #if len(plaintext) % BLOCK_SIZE != 0:␊ |
| # padded_text = plaintext.ljust((len(plaintext) / BLOCK_SIZE) + 1 * BLOCKSIZE), '\0')␊ |
| # -OR-␊ |
| #padded_text = plaintext.ljust((len(plaintext) + (BLOCK_SIZE - len(plaintext) % BLOCK_SIZE)), '\0')␊ |
| ␊ |
| r = rijndael.rijndael(padded_key, BLOCK_SIZE)␊ |
| ␊ |
| ciphertext = ''␊ |
| for start in range(0, len(padded_text), BLOCK_SIZE):␊ |
| ciphertext += r.encrypt(padded_text[start:start+BLOCK_SIZE])␊ |
| ␊ |
| encoded = base64.b64encode(ciphertext)␊ |
| ␊ |
| return encoded␊ |
| ␊ |
| ␊ |
| def decrypt(key, encoded):␊ |
| padded_key = key.ljust(KEY_SIZE, '\0')␊ |
| ␊ |
| ciphertext = base64.b64decode(encoded)␊ |
| ␊ |
| r = rijndael.rijndael(padded_key, BLOCK_SIZE)␊ |
| ␊ |
| padded_text = ''␊ |
| for start in range(0, len(ciphertext), BLOCK_SIZE):␊ |
| padded_text += r.decrypt(ciphertext[start:start+BLOCK_SIZE])␊ |
| ␊ |
| plaintext = padded_text.split('\x00', 1)[0]␊ |
| ␊ |
| return plaintext␊ |
| ␊ |
| key = 'MyKey'␊ |
| text = 'test'␊ |
| ␊ |
| encoded = encrypt(key, text)␊ |
| print repr(encoded)␊ |
| # prints 'I+KlvwIK2e690lPLDQMMUf5kfZmdZRIexYJp1SLWRJY='␊ |
| ␊ |
| decoded = decrypt(key, encoded)␊ |
| print repr(decoded)␊ |
| # prints 'test' |