Hacking Der Spiegel's paywall
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitattributes
blog_text.txt
caesar_cipher.png
char_count_baseline.png
char_count_cipher.png
char_count_encrypted.txt
char_count_normal.txt
char_freq_baseline.png
char_freq_cipher.png
clean_up.py
count_chars.py
decrypt.py
decryption_table.txt
my_xrb_wallet.png
normal_articles_edited.txt
obfuscated_text.png
r_code.txt
readme.txt
schulz_article.txt
schulz_article_cleaned.txt
schulz_article_cleaned_edited.txt
schulz_article_decrypted.txt
terminal_calls.txt
two_grams.py
two_grams_encrypted.txt
two_grams_normal.txt
word_count_baseline.png
word_count_cipher.png
word_freq.py
word_freqs_encrypted.txt
word_freqs_normal.txt

readme.txt

# tsj, feb 18

"schulz_article.txt" is the article extracted from Der Spiegel [link: http://www.spiegel.de/spiegel/martin-schulz-die-story-seiner-gescheiterten-kampagne-a-1170957.html]. 

clean_up.py cleaned the article up, resulting in schulz_article_cleaned.txt. The corresponding terminal call, as well as all other terminal calls, can be found in terminal_calls.txt. 

I then manually cleaned up the article a bit further, by removing some whitespace and some obviously irrelevant and not encrypted text. This is schulz_article_cleaned_edited.txt. 

As mentioned in the blog post, whose text can be found in blog_text.txt, I also collected some text from "normal" Der Spiegel articles. The normal text can be found in normal_articles_edited.txt.

Then, I ran the following scripts on both the encrypted article and the normal articles: the character frequency script (count_chars.py), the two-gram script (two_grams.py), the word frequency script (word_freq.py). The results can be found in the corresponding files. See the system arguments in terminal_calls.txt for details. 

I plotted the results using R. The R code can be found in r_code.txt. 

I used the available information to construct the substitution table, decryption_table.txt. With it, decrypt.py outputs the decrypted article.