Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kirisakow/1c92ead4460ba319a843b914a43342fd to your computer and use it in GitHub Desktop.
Save kirisakow/1c92ead4460ba319a843b914a43342fd to your computer and use it in GitHub Desktop.
Decipher a garbled PayPal SMS string supposed to be in Russian.ipynb
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"collapsed_sections": [
"W0YBbDpJza_I"
],
"authorship_tag": "ABX9TyNQ6Rj2MbVmceLqdUlNlyQg",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/kirisakow/1c92ead4460ba319a843b914a43342fd/decipher-a-garbled-paypal-sms-string-supposed-to-be-in-russian.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Decipher a garbled PayPal SMS string supposed to be in Russian\n",
"\n",
"Author: [Kiril Isakov][kisakov_linkedin] ([kirisakow][kirisakow_github])\n",
"\n",
"Below is a real-life example of a two-factor authentication SMS sent by PayPal to a friend of mine. My friend's mother tongue is Russian, and the SMS content is supposed to be in Russian too. And yet, as you can see, the text is broken and garbled beyond recognition:\n",
"\n",
"<img width=\"60%\" src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QCuRXhpZgAASUkqAAgAAAAHABIBAwABAAAAAQAAABoBBQABAAAAYgAAABsBBQABAAAAagAAACgBAwABAAAAAgAAADEBAgANAAAAcgAAADIBAgAUAAAAgAAAAGmHBAABAAAAlAAAAAAAAAAsAQAAAQAAACwBAAABAAAAR0lNUCAyLjEwLjM2AAAyMDI0OjA3OjI0IDIzOjQ4OjEyAAEAAaADAAEAAAABAAAAAAAAAP/hDM9odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDowMzkyMjM0Zi04ZDE3LTQ5ZmMtOWYzZC0zM2Y3ZDY5YTMzYTgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZWMyYWQzYWItMjM0OC00N2JlLWE5NmMtYzQyYzYwM2FlYjdlIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTI5NmRhZTEtOTMwZi00NTVmLTg3MGMtOWQzNTM3NDExYWY1IiBkYzpGb3JtYXQ9ImltYWdlL2pwZWciIEdJTVA6QVBJPSIyLjAiIEdJTVA6UGxhdGZvcm09IkxpbnV4IiBHSU1QOlRpbWVTdGFtcD0iMTcyMTg1Nzg0NDU0MDIyNyIgR0lNUDpWZXJzaW9uPSIyLjEwLjM2IiB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNDowNzoyNFQyMzo0ODoxMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQ6MDc6MjRUMjM6NDg6MTIrMDI6MDAiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6Y2hhbmdlZD0iLyIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplNzkxYmZjMC1jNTQyLTRlMWQtYmE1Mi00Y2E0ZTFiMjY2ODIiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIiBzdEV2dDp3aGVuPSIyMDI0LTA3LTI0VDIzOjUwOjQ0KzAyOjAwIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+ICsElDQ19QUk9GSUxFAAEBAAACoGxjbXMEQAAAbW50clJHQiBYWVogB+gABwAYABUALQAQYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAA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CAQQSACSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQCSSSSSSSSSSSSCQASSCQACSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQASSSSSSSSSSSSSSSQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSSCSSSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSCAAAQCQQACSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCACASQASQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSASACSCQSQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSACCSCQCSSQACSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASSSSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSSSSSSSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQASSSQQSSASSSSSQASSCCSSSSSSSSASSSSSQASSQSSSSSCSSSSSSSSSSSCACQSQCAASSCSCCSQCSQCQSQSCQSASQQCQSCSCQSCACCSSSSSSSSSSSSQASAACCCQASQSQQQAQSAQSSSCQCCAQSCSSCQQCSAQSSQSSSSSSSSSSSSSCSQCAQSAAAQSSQSQQSSSCSQSSSCQQSCSSCSQCCQSSASSSSSSSSSSSSSSSCQCCSCQSCSQQASSQQSCSSCACSSCSSSSSSCSCSSCCCSCCCSSSSSSSSSSSSSSSSSSSSSSCASASSCSSSQCQSSQSSSQCSQSSQASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSASSSSSSSSSSSSSSSSSSTySSSSQyGEmFg+SSSSSQSSSSSSSSSSSSSSSSSQASSSSSSSSSSSASSQQSTXySTSySALjnlTuSSSSQSSSSSSSSSSSSSSSSQQSASASCQAQACQQQQSQCAD6TSXQ+iFT1rr0SQQSCAAQQSSSSSSSSSSSSSSCCAQSSQAACQQCACSSSSQBzVlyce2Obj5dCQCSSQQQCSSSSSSSSSSSSSASSSCSSCASSACSCSQSQSAEySQ2ilZjvRX3sySAQCQASSSSSSSSSSSSSSSSSAASQCSSQASQACQAQSAXU0kkFEYlGwg2pKQASAASQACSSSSSSSSSSSSCCSQCSQQSSQSSQSSSCSQQW22220m20m22mkyQCCQSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSSSSSCSSASSSSSSSSQCSCSQCSSASSSSSSCSSSSSSSSSSSSCCSCSCCAASCSSQSCSCSSSQSSQSSSQQSSSACSCSCCSSQQSSSSSSSSSSSSSSASSQSQCCSQAACSSSSSSSCCSCCSQCSSSQQSQCSQQSSQCSSSSSSSSSSSSCAACCCCCQSQAACQQSCACAQSAQSASAQSQSCCCCSCAQCQSSSSSSSSSSSSSAQCASASQQSASSQSQSASSSSSSSSSSQACCAQSSSAAQQQCCCSSSSSSSSSSSSQSSQSQCQCQQCSSSSSQCQSSSSSSSSQSAQSCSSASQQCSSSSSSSSSSSSSSSSSSSSSASSSQCSSSSSSSSQCSQCSQCSSSSASSASSSSSSASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSSSSSSSSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQQQSASSQSQASSSSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCQSCSSCCCSQAQQQQQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCQCCQCCSCSQCQSAQSCCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSQCSCSCQCQQSSQSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSCSQQSCASSSCAQCSQCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSQCSSSSQSSSSCSCSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSASSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQSSSSQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS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\">\n",
"\n",
"Then I tried and deciphered it by writing a few functions in Python.\n",
"\n",
"As a result, after a few hours of trial and error,\n",
"\n",
"- all lowercase characters of the Russian alphabet (`абвгде(ё)жзийклмнопрстуфхцчшщъыьэюя`) have been successfully restaured, with the corresponding cipher being pairs of characters made of `¿` + one character from the range `012345(5)6789:;<=>?@ABCDEFGHIJKLMNO`, which is a continuous sub-range of the legacy character set [Windows-1252][cp1252] aka ANSI, seemingly still in use in PayPal software instead of the UTF-8 standard;\n",
"\n",
"- only the few (two) uppercase characters have not been deciphered, because both have the same cipher `¿¿`; still, with all rest of the message being deciphered, they can easily be inferred logically.\n",
"\n",
"<br>\n",
"\n",
"This notebook is meant to show you how I did it.\n",
"\n",
"[kisakov_linkedin]: https://www.linkedin.com/in/kisakov/\n",
"[kirisakow_github]: https://github.com/kirisakow\n",
"[cp1252]: https://en.wikipedia.org/wiki/Windows-1252"
],
"metadata": {
"id": "ayQVJsZAxI4g"
}
},
{
"cell_type": "markdown",
"source": [
"### Functions"
],
"metadata": {
"id": "W0YBbDpJza_I"
}
},
{
"cell_type": "code",
"source": [
"from typing import Generator\n",
"\n",
"def decipher(s: str, d: dict) -> str:\n",
" \"\"\"Decipher a string `s` with a dictionary `d`\"\"\"\n",
" for clean, ciphered in d.items():\n",
" s = s.replace(ciphered, clean)\n",
" return s\n",
"\n",
"def build_range_of_chars(first_char: str, length: int) -> Generator[str, None, None]:\n",
" \"\"\"A generator that yields `length` many characters starting from\n",
" `first_char` and followed by characters of subsequent Unicode code points.\n",
" E.g.: `build_range_of_chars('a', 4)` will return `a`, `b`, `c`, `d`.\"\"\"\n",
" first_code_point = ord(first_char)\n",
" last_code_point = first_code_point + length\n",
" for n in range(first_code_point, last_code_point):\n",
" yield chr(n)"
],
"metadata": {
"id": "Ju1svGFozQek"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Solution"
],
"metadata": {
"id": "JtiknrjLzhgW"
}
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "l6sxVE_AxBGJ",
"outputId": "2a6141ab-eb5b-4dd1-be30-ebb8a9e3ba0a"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"'PayPal: ¿¿¿0¿H ¿:¿>¿4 ¿1¿5¿7¿>¿?¿0¿A¿=¿>¿A¿B¿8 - 444759 ¿¿¿8¿:¿>¿<¿C ¿=¿5 ¿A¿>¿>¿1¿I¿0¿9¿B¿5 ¿2¿0¿H ¿:¿>¿4.'\n",
"\n",
"'PayPal: ¿¿ а ш к о д б е з о п а с н о с т и - 444759 ¿¿ и к о м у н е с о о б щ а й т е в а ш к о д.'\n"
]
}
],
"source": [
"alphabet_length = 32 # 32 тк без буквы ё... так уж сложилось 🤷\n",
"rus_alph_lowercase_list = build_range_of_chars('а', alphabet_length) # абвгдежзийклмнопрстуфхцчшщъыьэюя\n",
"cipher_list = build_range_of_chars('0', alphabet_length) # 0123456789:;<=>?@ABCDEFGHIJKLMNO\n",
"\n",
"garbled_str = 'PayPal: ¿¿¿0¿H ¿:¿>¿4 ¿1¿5¿7¿>¿?¿0¿A¿=¿>¿A¿B¿8 - 444759 ¿¿¿8¿:¿>¿<¿C ¿=¿5 ¿A¿>¿>¿1¿I¿0¿9¿B¿5 ¿2¿0¿H ¿:¿>¿4.'\n",
"prefix = '¿'\n",
"dictionary = {char.rjust(2): f'{prefix}{cipher}' for char, cipher in zip(rus_alph_lowercase_list, cipher_list)}\n",
"\n",
"deciphered_str = decipher(garbled_str, dictionary)\n",
"print(repr(garbled_str), repr(deciphered_str), sep='\\n\\n')"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment