<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.mafiasi.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blackmole</id>
	<title>Fachschaft Informatik - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mafiasi.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blackmole"/>
	<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php/Spezial:Beitr%C3%A4ge/Blackmole"/>
	<updated>2026-10-17T08:26:45Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5933</id>
		<title>STiNE-filetransfer.exe</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5933"/>
		<updated>2008-09-25T01:23:40Z</updated>

		<summary type="html">&lt;p&gt;Blackmole: Großes N sowie kleines j vergessen und nun ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der verschleierten URL ==&lt;br /&gt;
/scripts/filetransfer.exe?[lange hexzeichenkette]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Klartext-URL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=[Session-ID 15N]&amp;amp;fnsrc=f[15N (bei mir alle 15N, evt. auch mehr/weniger)].cache&amp;amp;fndest=[Auslieferungsdateiname]&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel einer gültigen URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Hexzeichenkette ==&lt;br /&gt;
Es wird ein einfaches Substitutionsverfahren verwendet. Jedes Zeichen wird durch einen vierstelligen Hexcode ersetzt. Eventuell ist hier noch ein Muster drin, momentan ist jedoch keines bekannt.&lt;br /&gt;
=== Ersetzungstabelle ===&lt;br /&gt;
Die Liste ist nun zum größten Teil vollständig. Es fehlt noch das Leerzeichen sowie eher ungebräuchlichere ASCII-Codes, insbesondere Steuerzeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Zahlen&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 8977 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || 1&lt;br /&gt;
|-&lt;br /&gt;
| a8b1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3dc2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3b98 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 4423 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 6950 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 9ee7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 7678 || 8&lt;br /&gt;
|-&lt;br /&gt;
| ac3b || 9&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Großbuchstaben&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 478b || A&lt;br /&gt;
|-&lt;br /&gt;
| 76fd || B&lt;br /&gt;
|-&lt;br /&gt;
| 4886 || C&lt;br /&gt;
|-&lt;br /&gt;
| 92d1 || D&lt;br /&gt;
|-&lt;br /&gt;
| 3ace || E&lt;br /&gt;
|-&lt;br /&gt;
| 3322 || F&lt;br /&gt;
|-&lt;br /&gt;
| 4b34 || G&lt;br /&gt;
|-&lt;br /&gt;
| b7f7 || H&lt;br /&gt;
|-&lt;br /&gt;
| a4bf || I&lt;br /&gt;
|-&lt;br /&gt;
| a59e || J&lt;br /&gt;
|-&lt;br /&gt;
| 2331 || K&lt;br /&gt;
|-&lt;br /&gt;
| b90e || L&lt;br /&gt;
|-&lt;br /&gt;
| 6296 || M&lt;br /&gt;
|-&lt;br /&gt;
| 45e4 || N&lt;br /&gt;
|-&lt;br /&gt;
| 81e8 || O&lt;br /&gt;
|-&lt;br /&gt;
| 9eb8 || P&lt;br /&gt;
|-&lt;br /&gt;
| 0d21 || Q&lt;br /&gt;
|-&lt;br /&gt;
| 5a84 || R&lt;br /&gt;
|-&lt;br /&gt;
| 9396 || S&lt;br /&gt;
|-&lt;br /&gt;
| 642a || T&lt;br /&gt;
|-&lt;br /&gt;
| 0682 || U&lt;br /&gt;
|-&lt;br /&gt;
| 7df7 || V&lt;br /&gt;
|-&lt;br /&gt;
| 0a17 || W&lt;br /&gt;
|-&lt;br /&gt;
| a14e || X&lt;br /&gt;
|-&lt;br /&gt;
| 284a || Y&lt;br /&gt;
|-&lt;br /&gt;
| a2ec || Z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Kleinbuchstaben&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 781f || a&lt;br /&gt;
|-&lt;br /&gt;
| a007 || b&lt;br /&gt;
|-&lt;br /&gt;
| 7abe || c&lt;br /&gt;
|-&lt;br /&gt;
| b84f || d&lt;br /&gt;
|-&lt;br /&gt;
| b91d || e&lt;br /&gt;
|-&lt;br /&gt;
| 2104 || f&lt;br /&gt;
|-&lt;br /&gt;
| 94f2 || g&lt;br /&gt;
|-&lt;br /&gt;
| 6e19 || h&lt;br /&gt;
|-&lt;br /&gt;
| 644d || i&lt;br /&gt;
|-&lt;br /&gt;
| a852 || j&lt;br /&gt;
|-&lt;br /&gt;
| 2cba || k&lt;br /&gt;
|-&lt;br /&gt;
| 2906 || l&lt;br /&gt;
|-&lt;br /&gt;
| 8606 || m&lt;br /&gt;
|-&lt;br /&gt;
| 46df || n&lt;br /&gt;
|-&lt;br /&gt;
| 2d78 || o&lt;br /&gt;
|-&lt;br /&gt;
| 15c8 || p&lt;br /&gt;
|-&lt;br /&gt;
| 8be3 || q&lt;br /&gt;
|-&lt;br /&gt;
| 7b4f || r&lt;br /&gt;
|-&lt;br /&gt;
| 27c2 || s&lt;br /&gt;
|-&lt;br /&gt;
| 04c6 || t&lt;br /&gt;
|-&lt;br /&gt;
| 98cb || u&lt;br /&gt;
|-&lt;br /&gt;
| 6141 || v&lt;br /&gt;
|-&lt;br /&gt;
| 06db || w&lt;br /&gt;
|-&lt;br /&gt;
| 594e || x&lt;br /&gt;
|-&lt;br /&gt;
| 5977 || y&lt;br /&gt;
|-&lt;br /&gt;
| 9d29 || z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Sonderzeichen&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 432b || !&lt;br /&gt;
|-&lt;br /&gt;
| 7c0c || #&lt;br /&gt;
|-&lt;br /&gt;
| 62da || $&lt;br /&gt;
|-&lt;br /&gt;
| 112f || %&lt;br /&gt;
|-&lt;br /&gt;
| 0e27 || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| 0409 || &#039;&lt;br /&gt;
|-&lt;br /&gt;
| 2692 || (&lt;br /&gt;
|-&lt;br /&gt;
| 6b27 || )&lt;br /&gt;
|-&lt;br /&gt;
| 5721 || *&lt;br /&gt;
|-&lt;br /&gt;
| 56fd || +&lt;br /&gt;
|-&lt;br /&gt;
| 789b || ,&lt;br /&gt;
|-&lt;br /&gt;
| aeb7 || -&lt;br /&gt;
|-&lt;br /&gt;
| 6e93 || .&lt;br /&gt;
|-&lt;br /&gt;
| a837 || /&lt;br /&gt;
|-&lt;br /&gt;
| 54e5 || ;&lt;br /&gt;
|-&lt;br /&gt;
| 76b1 || &amp;lt;&lt;br /&gt;
|-&lt;br /&gt;
| 3dd0 || =&lt;br /&gt;
|-&lt;br /&gt;
| 7b44 || &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 923d || @&lt;br /&gt;
|-&lt;br /&gt;
| 493f || [&lt;br /&gt;
|-&lt;br /&gt;
| 6a15 || ]&lt;br /&gt;
|-&lt;br /&gt;
| 8991 || ^&lt;br /&gt;
|-&lt;br /&gt;
| 6873 || _&lt;br /&gt;
|-&lt;br /&gt;
| 51ed || `&lt;br /&gt;
|-&lt;br /&gt;
| 45ea || {&lt;br /&gt;
|-&lt;br /&gt;
| 1d54 || &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2545 || }&lt;br /&gt;
|-&lt;br /&gt;
| 4092 || ~&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Umlaute&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 3240 || Ä&lt;br /&gt;
|-&lt;br /&gt;
| 28b7 || Ö&lt;br /&gt;
|-&lt;br /&gt;
| 3ada || Ü&lt;br /&gt;
|-&lt;br /&gt;
| 8c24 || ä&lt;br /&gt;
|-&lt;br /&gt;
| 16da || ö&lt;br /&gt;
|-&lt;br /&gt;
| 4a5b || ü&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python-Modul zum verschleiern/entschleiern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
STiNE filetransfer.exe decoder/encoder&lt;br /&gt;
Copyright (c) 2008 Henning Pridöhl&lt;br /&gt;
MIT License - http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
This module is for decoding and encoding of the filetransfer.exe parameter&lt;br /&gt;
of STiNE. It consists of three functions:&lt;br /&gt;
1) string encoded_parameter encode_transfer(string query_string)&lt;br /&gt;
2) string decoded_query_string decode_transfer(string encoded_parameter)&lt;br /&gt;
3) string encoded_parameter build_transfer(&lt;br /&gt;
    session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;)&lt;br /&gt;
    &lt;br /&gt;
Please note that the code table doesn&#039;t contain the complete ASCII!&lt;br /&gt;
Feel free to add missing codes.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Encoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;)&lt;br /&gt;
&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding with unknown codes results in &#039;?&#039; (f00b is unknown)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;f00b781f7b4f&#039;)&lt;br /&gt;
&#039;?ar&#039;&lt;br /&gt;
&lt;br /&gt;
Building the transfer easily&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; build_transfer(333090280767182, &#039;f333043751172556.cache&#039;, &#039;OnlineKontrollausdruck.pdf&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Debug decoding (e.g. for adding new codes to the code table)&lt;br /&gt;
Just join the result with &amp;quot;\n&amp;quot; and display it :)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;, True)&lt;br /&gt;
(&#039;2104 2d78 2d78 a007 781f 7b4f&#039;, &#039;f    o    o    b    a    r   &#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
code_table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
8977 0&lt;br /&gt;
2018 1&lt;br /&gt;
a8b1 2&lt;br /&gt;
3dc2 3&lt;br /&gt;
3b98 4&lt;br /&gt;
4423 5&lt;br /&gt;
6950 6&lt;br /&gt;
9ee7 7&lt;br /&gt;
7678 8&lt;br /&gt;
ac3b 9&lt;br /&gt;
478b A&lt;br /&gt;
76fd B&lt;br /&gt;
4886 C&lt;br /&gt;
92d1 D&lt;br /&gt;
3ace E&lt;br /&gt;
3322 F&lt;br /&gt;
4b34 G&lt;br /&gt;
b7f7 H&lt;br /&gt;
a4bf I&lt;br /&gt;
a59e J&lt;br /&gt;
2331 K&lt;br /&gt;
b90e L&lt;br /&gt;
6296 M&lt;br /&gt;
45e4 N&lt;br /&gt;
81e8 O&lt;br /&gt;
9eb8 P&lt;br /&gt;
0d21 Q&lt;br /&gt;
5a84 R&lt;br /&gt;
9396 S&lt;br /&gt;
642a T&lt;br /&gt;
0682 U&lt;br /&gt;
7df7 V&lt;br /&gt;
0a17 W&lt;br /&gt;
a14e X&lt;br /&gt;
284a Y&lt;br /&gt;
a2ec Z&lt;br /&gt;
781f a&lt;br /&gt;
a007 b&lt;br /&gt;
7abe c&lt;br /&gt;
b84f d&lt;br /&gt;
b91d e&lt;br /&gt;
2104 f&lt;br /&gt;
94f2 g&lt;br /&gt;
6e19 h&lt;br /&gt;
644d i&lt;br /&gt;
a852 j&lt;br /&gt;
2cba k&lt;br /&gt;
2906 l&lt;br /&gt;
8606 m&lt;br /&gt;
46df n&lt;br /&gt;
2d78 o&lt;br /&gt;
15c8 p&lt;br /&gt;
8be3 q&lt;br /&gt;
7b4f r&lt;br /&gt;
27c2 s&lt;br /&gt;
04c6 t&lt;br /&gt;
98cb u&lt;br /&gt;
6141 v&lt;br /&gt;
06db w&lt;br /&gt;
594e x&lt;br /&gt;
5977 y&lt;br /&gt;
9d29 z&lt;br /&gt;
432b !&lt;br /&gt;
7c0c #&lt;br /&gt;
62da $&lt;br /&gt;
112f %&lt;br /&gt;
0e27 &amp;amp;&lt;br /&gt;
0409 &#039;&lt;br /&gt;
2692 (&lt;br /&gt;
6b27 )&lt;br /&gt;
5721 *&lt;br /&gt;
56fd +&lt;br /&gt;
789b ,&lt;br /&gt;
aeb7 -&lt;br /&gt;
6e93 .&lt;br /&gt;
a837 /&lt;br /&gt;
54e5 ;&lt;br /&gt;
76b1 &amp;lt;&lt;br /&gt;
3dd0 =&lt;br /&gt;
7b44 &amp;gt;&lt;br /&gt;
923d @&lt;br /&gt;
493f [&lt;br /&gt;
6a15 ]&lt;br /&gt;
8991 ^&lt;br /&gt;
6873 _&lt;br /&gt;
51ed `&lt;br /&gt;
45ea {&lt;br /&gt;
1d54 |&lt;br /&gt;
2545 }&lt;br /&gt;
4092 ~&lt;br /&gt;
3240 Ä&lt;br /&gt;
28b7 Ö&lt;br /&gt;
3ada Ü&lt;br /&gt;
8c24 ä&lt;br /&gt;
16da ö&lt;br /&gt;
4a5b ü&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.strip()&lt;br /&gt;
&lt;br /&gt;
decode_dict = {}&lt;br /&gt;
encode_dict = {}&lt;br /&gt;
for line in code_table.split(&#039;\n&#039;):&lt;br /&gt;
    code, char = line.split()&lt;br /&gt;
    decode_dict[code] = char&lt;br /&gt;
    encode_dict[char] = code&lt;br /&gt;
    &lt;br /&gt;
del code_table&lt;br /&gt;
&lt;br /&gt;
def encode_transfer(plain):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Encodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;foobar&#039;)&lt;br /&gt;
    &#039;21042d782d78a007781f7b4f&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &#039;&#039;.join([encode_dict.get(x, &#039;????&#039;) for x in plain])&lt;br /&gt;
&lt;br /&gt;
def decode_transfer(encoded, debug=False):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Decodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;)&lt;br /&gt;
    &#039;foobar&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    encoded = encoded.replace(&#039;https://www.stine.uni-hamburg.de/scripts/&#039;, &#039;&#039;) \&lt;br /&gt;
                     .replace(&#039;filetransfer.exe?&#039;, &#039;&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        if len(encoded) % 4 != 0:&lt;br /&gt;
            raise&lt;br /&gt;
        if not debug:&lt;br /&gt;
            return &#039;&#039;.join([decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                            for i in xrange(len(encoded)/4)])&lt;br /&gt;
        else:&lt;br /&gt;
            return (&lt;br /&gt;
                &#039; &#039;.join([encoded[i*4:(i+1)*4]&lt;br /&gt;
                          for i in xrange(len(encoded)/4)]),&lt;br /&gt;
                &#039; &#039;.join([&#039;%s   &#039; % decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                          for i in xrange(len(encoded)/4)])&lt;br /&gt;
            )&lt;br /&gt;
    except:&lt;br /&gt;
        raise ValueError(&#039;encoded string is malformed!&#039;)&lt;br /&gt;
&lt;br /&gt;
def build_transfer(session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Builds an transfer name by given url parameters&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import hashlib; hashlib.sha1(&lt;br /&gt;
    ...     build_transfer(333090280767182, &#039;f00.cache&#039;, &#039;foo.pdf&#039;)&lt;br /&gt;
    ... ).hexdigest()&lt;br /&gt;
    &#039;c6fa3a7e5cdf544f2d01978d084ea0e4aca6beb3&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return encode_transfer(&lt;br /&gt;
        &#039;mode=download&amp;amp;installdir=%s&amp;amp;session=%s&amp;amp;fnsrc=%s&amp;amp;fndest=%s&amp;amp;subdir=%s&#039;&lt;br /&gt;
        % (installdir, session, fnsrc, fndest, subdir)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    import doctest&lt;br /&gt;
    doctest.testmod()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: STiNE]]&lt;/div&gt;</summary>
		<author><name>Blackmole</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5932</id>
		<title>STiNE-filetransfer.exe</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5932"/>
		<updated>2008-09-25T01:12:11Z</updated>

		<summary type="html">&lt;p&gt;Blackmole: Markup: Tabellentitel wirklich als Tabellentitel und nicht als Überschriften&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der verschleierten URL ==&lt;br /&gt;
/scripts/filetransfer.exe?[lange hexzeichenkette]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Klartext-URL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=[Session-ID 15N]&amp;amp;fnsrc=f[15N (bei mir alle 15N, evt. auch mehr/weniger)].cache&amp;amp;fndest=[Auslieferungsdateiname]&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel einer gültigen URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Hexzeichenkette ==&lt;br /&gt;
Es wird ein einfaches Substitutionsverfahren verwendet. Jedes Zeichen wird durch einen vierstelligen Hexcode ersetzt. Eventuell ist hier noch ein Muster drin, momentan ist jedoch keines bekannt.&lt;br /&gt;
=== Ersetzungstabelle ===&lt;br /&gt;
Die Liste ist nun zum größten Teil vollständig. Es fehlt noch das Leerzeichen sowie eher ungebräuchlichere ASCII-Codes, insbesondere Steuerzeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Zahlen&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 8977 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || 1&lt;br /&gt;
|-&lt;br /&gt;
| a8b1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3dc2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3b98 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 4423 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 6950 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 9ee7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 7678 || 8&lt;br /&gt;
|-&lt;br /&gt;
| ac3b || 9&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Großbuchstaben&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 478b || A&lt;br /&gt;
|-&lt;br /&gt;
| 76fd || B&lt;br /&gt;
|-&lt;br /&gt;
| 4886 || C&lt;br /&gt;
|-&lt;br /&gt;
| 92d1 || D&lt;br /&gt;
|-&lt;br /&gt;
| 3ace || E&lt;br /&gt;
|-&lt;br /&gt;
| 3322 || F&lt;br /&gt;
|-&lt;br /&gt;
| 4b34 || G&lt;br /&gt;
|-&lt;br /&gt;
| b7f7 || H&lt;br /&gt;
|-&lt;br /&gt;
| a4bf || I&lt;br /&gt;
|-&lt;br /&gt;
| a59e || J&lt;br /&gt;
|-&lt;br /&gt;
| 2331 || K&lt;br /&gt;
|-&lt;br /&gt;
| b90e || L&lt;br /&gt;
|-&lt;br /&gt;
| 6296 || M&lt;br /&gt;
|-&lt;br /&gt;
| 81e8 || O&lt;br /&gt;
|-&lt;br /&gt;
| 9eb8 || P&lt;br /&gt;
|-&lt;br /&gt;
| 0d21 || Q&lt;br /&gt;
|-&lt;br /&gt;
| 5a84 || R&lt;br /&gt;
|-&lt;br /&gt;
| 9396 || S&lt;br /&gt;
|-&lt;br /&gt;
| 642a || T&lt;br /&gt;
|-&lt;br /&gt;
| 0682 || U&lt;br /&gt;
|-&lt;br /&gt;
| 7df7 || V&lt;br /&gt;
|-&lt;br /&gt;
| 0a17 || W&lt;br /&gt;
|-&lt;br /&gt;
| a14e || X&lt;br /&gt;
|-&lt;br /&gt;
| 284a || Y&lt;br /&gt;
|-&lt;br /&gt;
| a2ec || Z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Kleinbuchstaben&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 781f || a&lt;br /&gt;
|-&lt;br /&gt;
| a007 || b&lt;br /&gt;
|-&lt;br /&gt;
| 7abe || c&lt;br /&gt;
|-&lt;br /&gt;
| b84f || d&lt;br /&gt;
|-&lt;br /&gt;
| b91d || e&lt;br /&gt;
|-&lt;br /&gt;
| 2104 || f&lt;br /&gt;
|-&lt;br /&gt;
| 94f2 || g&lt;br /&gt;
|-&lt;br /&gt;
| 6e19 || h&lt;br /&gt;
|-&lt;br /&gt;
| 644d || i&lt;br /&gt;
|-&lt;br /&gt;
| 2cba || k&lt;br /&gt;
|-&lt;br /&gt;
| 2906 || l&lt;br /&gt;
|-&lt;br /&gt;
| 8606 || m&lt;br /&gt;
|-&lt;br /&gt;
| 46df || n&lt;br /&gt;
|-&lt;br /&gt;
| 2d78 || o&lt;br /&gt;
|-&lt;br /&gt;
| 15c8 || p&lt;br /&gt;
|-&lt;br /&gt;
| 8be3 || q&lt;br /&gt;
|-&lt;br /&gt;
| 7b4f || r&lt;br /&gt;
|-&lt;br /&gt;
| 27c2 || s&lt;br /&gt;
|-&lt;br /&gt;
| 04c6 || t&lt;br /&gt;
|-&lt;br /&gt;
| 98cb || u&lt;br /&gt;
|-&lt;br /&gt;
| 6141 || v&lt;br /&gt;
|-&lt;br /&gt;
| 06db || w&lt;br /&gt;
|-&lt;br /&gt;
| 594e || x&lt;br /&gt;
|-&lt;br /&gt;
| 5977 || y&lt;br /&gt;
|-&lt;br /&gt;
| 9d29 || z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Sonderzeichen&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 432b || !&lt;br /&gt;
|-&lt;br /&gt;
| 7c0c || #&lt;br /&gt;
|-&lt;br /&gt;
| 62da || $&lt;br /&gt;
|-&lt;br /&gt;
| 112f || %&lt;br /&gt;
|-&lt;br /&gt;
| 0e27 || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| 0409 || &#039;&lt;br /&gt;
|-&lt;br /&gt;
| 2692 || (&lt;br /&gt;
|-&lt;br /&gt;
| 6b27 || )&lt;br /&gt;
|-&lt;br /&gt;
| 5721 || *&lt;br /&gt;
|-&lt;br /&gt;
| 56fd || +&lt;br /&gt;
|-&lt;br /&gt;
| 789b || ,&lt;br /&gt;
|-&lt;br /&gt;
| aeb7 || -&lt;br /&gt;
|-&lt;br /&gt;
| 6e93 || .&lt;br /&gt;
|-&lt;br /&gt;
| a837 || /&lt;br /&gt;
|-&lt;br /&gt;
| 54e5 || ;&lt;br /&gt;
|-&lt;br /&gt;
| 76b1 || &amp;lt;&lt;br /&gt;
|-&lt;br /&gt;
| 3dd0 || =&lt;br /&gt;
|-&lt;br /&gt;
| 7b44 || &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 923d || @&lt;br /&gt;
|-&lt;br /&gt;
| 493f || [&lt;br /&gt;
|-&lt;br /&gt;
| 6a15 || ]&lt;br /&gt;
|-&lt;br /&gt;
| 8991 || ^&lt;br /&gt;
|-&lt;br /&gt;
| 6873 || _&lt;br /&gt;
|-&lt;br /&gt;
| 51ed || `&lt;br /&gt;
|-&lt;br /&gt;
| 45ea || {&lt;br /&gt;
|-&lt;br /&gt;
| 1d54 || &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2545 || }&lt;br /&gt;
|-&lt;br /&gt;
| 4092 || ~&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Umlaute&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 3240 || Ä&lt;br /&gt;
|-&lt;br /&gt;
| 28b7 || Ö&lt;br /&gt;
|-&lt;br /&gt;
| 3ada || Ü&lt;br /&gt;
|-&lt;br /&gt;
| 8c24 || ä&lt;br /&gt;
|-&lt;br /&gt;
| 16da || ö&lt;br /&gt;
|-&lt;br /&gt;
| 4a5b || ü&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python-Modul zum verschleiern/entschleiern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
STiNE filetransfer.exe decoder/encoder&lt;br /&gt;
Copyright (c) 2008 Henning Pridöhl&lt;br /&gt;
MIT License - http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
This module is for decoding and encoding of the filetransfer.exe parameter&lt;br /&gt;
of STiNE. It consists of three functions:&lt;br /&gt;
1) string encoded_parameter encode_transfer(string query_string)&lt;br /&gt;
2) string decoded_query_string decode_transfer(string encoded_parameter)&lt;br /&gt;
3) string encoded_parameter build_transfer(&lt;br /&gt;
    session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;)&lt;br /&gt;
    &lt;br /&gt;
Please note that the code table doesn&#039;t contain the complete ASCII!&lt;br /&gt;
Feel free to add missing codes.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Encoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;)&lt;br /&gt;
&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding with unknown codes results in &#039;?&#039; (f00b is unknown)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;f00b781f7b4f&#039;)&lt;br /&gt;
&#039;?ar&#039;&lt;br /&gt;
&lt;br /&gt;
Building the transfer easily&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; build_transfer(333090280767182, &#039;f333043751172556.cache&#039;, &#039;OnlineKontrollausdruck.pdf&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Debug decoding (e.g. for adding new codes to the code table)&lt;br /&gt;
Just join the result with &amp;quot;\n&amp;quot; and display it :)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;, True)&lt;br /&gt;
(&#039;2104 2d78 2d78 a007 781f 7b4f&#039;, &#039;f    o    o    b    a    r   &#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
code_table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
8977 0&lt;br /&gt;
2018 1&lt;br /&gt;
a8b1 2&lt;br /&gt;
3dc2 3&lt;br /&gt;
3b98 4&lt;br /&gt;
4423 5&lt;br /&gt;
6950 6&lt;br /&gt;
9ee7 7&lt;br /&gt;
7678 8&lt;br /&gt;
ac3b 9&lt;br /&gt;
478b A&lt;br /&gt;
76fd B&lt;br /&gt;
4886 C&lt;br /&gt;
92d1 D&lt;br /&gt;
3ace E&lt;br /&gt;
3322 F&lt;br /&gt;
4b34 G&lt;br /&gt;
b7f7 H&lt;br /&gt;
a4bf I&lt;br /&gt;
a59e J&lt;br /&gt;
2331 K&lt;br /&gt;
b90e L&lt;br /&gt;
6296 M&lt;br /&gt;
81e8 O&lt;br /&gt;
9eb8 P&lt;br /&gt;
0d21 Q&lt;br /&gt;
5a84 R&lt;br /&gt;
9396 S&lt;br /&gt;
642a T&lt;br /&gt;
0682 U&lt;br /&gt;
7df7 V&lt;br /&gt;
0a17 W&lt;br /&gt;
a14e X&lt;br /&gt;
284a Y&lt;br /&gt;
a2ec Z&lt;br /&gt;
781f a&lt;br /&gt;
a007 b&lt;br /&gt;
7abe c&lt;br /&gt;
b84f d&lt;br /&gt;
b91d e&lt;br /&gt;
2104 f&lt;br /&gt;
94f2 g&lt;br /&gt;
6e19 h&lt;br /&gt;
644d i&lt;br /&gt;
2cba k&lt;br /&gt;
2906 l&lt;br /&gt;
8606 m&lt;br /&gt;
46df n&lt;br /&gt;
2d78 o&lt;br /&gt;
15c8 p&lt;br /&gt;
8be3 q&lt;br /&gt;
7b4f r&lt;br /&gt;
27c2 s&lt;br /&gt;
04c6 t&lt;br /&gt;
98cb u&lt;br /&gt;
6141 v&lt;br /&gt;
06db w&lt;br /&gt;
594e x&lt;br /&gt;
5977 y&lt;br /&gt;
9d29 z&lt;br /&gt;
432b !&lt;br /&gt;
7c0c #&lt;br /&gt;
62da $&lt;br /&gt;
112f %&lt;br /&gt;
0e27 &amp;amp;&lt;br /&gt;
0409 &#039;&lt;br /&gt;
2692 (&lt;br /&gt;
6b27 )&lt;br /&gt;
5721 *&lt;br /&gt;
56fd +&lt;br /&gt;
789b ,&lt;br /&gt;
aeb7 -&lt;br /&gt;
6e93 .&lt;br /&gt;
a837 /&lt;br /&gt;
54e5 ;&lt;br /&gt;
76b1 &amp;lt;&lt;br /&gt;
3dd0 =&lt;br /&gt;
7b44 &amp;gt;&lt;br /&gt;
923d @&lt;br /&gt;
493f [&lt;br /&gt;
6a15 ]&lt;br /&gt;
8991 ^&lt;br /&gt;
6873 _&lt;br /&gt;
51ed `&lt;br /&gt;
45ea {&lt;br /&gt;
1d54 |&lt;br /&gt;
2545 }&lt;br /&gt;
4092 ~&lt;br /&gt;
3240 Ä&lt;br /&gt;
28b7 Ö&lt;br /&gt;
3ada Ü&lt;br /&gt;
8c24 ä&lt;br /&gt;
16da ö&lt;br /&gt;
4a5b ü&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.strip()&lt;br /&gt;
&lt;br /&gt;
decode_dict = {}&lt;br /&gt;
encode_dict = {}&lt;br /&gt;
for line in code_table.split(&#039;\n&#039;):&lt;br /&gt;
    code, char = line.split()&lt;br /&gt;
    decode_dict[code] = char&lt;br /&gt;
    encode_dict[char] = code&lt;br /&gt;
    &lt;br /&gt;
del code_table&lt;br /&gt;
&lt;br /&gt;
def encode_transfer(plain):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Encodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;foobar&#039;)&lt;br /&gt;
    &#039;21042d782d78a007781f7b4f&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &#039;&#039;.join([encode_dict.get(x, &#039;????&#039;) for x in plain])&lt;br /&gt;
&lt;br /&gt;
def decode_transfer(encoded, debug=False):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Decodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;)&lt;br /&gt;
    &#039;foobar&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    encoded = encoded.replace(&#039;https://www.stine.uni-hamburg.de/scripts/&#039;, &#039;&#039;) \&lt;br /&gt;
                     .replace(&#039;filetransfer.exe?&#039;, &#039;&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        if len(encoded) % 4 != 0:&lt;br /&gt;
            raise&lt;br /&gt;
        if not debug:&lt;br /&gt;
            return &#039;&#039;.join([decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                            for i in xrange(len(encoded)/4)])&lt;br /&gt;
        else:&lt;br /&gt;
            return (&lt;br /&gt;
                &#039; &#039;.join([encoded[i*4:(i+1)*4]&lt;br /&gt;
                          for i in xrange(len(encoded)/4)]),&lt;br /&gt;
                &#039; &#039;.join([&#039;%s   &#039; % decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                          for i in xrange(len(encoded)/4)])&lt;br /&gt;
            )&lt;br /&gt;
    except:&lt;br /&gt;
        raise ValueError(&#039;encoded string is malformed!&#039;)&lt;br /&gt;
&lt;br /&gt;
def build_transfer(session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Builds an transfer name by given url parameters&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import hashlib; hashlib.sha1(&lt;br /&gt;
    ...     build_transfer(333090280767182, &#039;f00.cache&#039;, &#039;foo.pdf&#039;)&lt;br /&gt;
    ... ).hexdigest()&lt;br /&gt;
    &#039;c6fa3a7e5cdf544f2d01978d084ea0e4aca6beb3&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return encode_transfer(&lt;br /&gt;
        &#039;mode=download&amp;amp;installdir=%s&amp;amp;session=%s&amp;amp;fnsrc=%s&amp;amp;fndest=%s&amp;amp;subdir=%s&#039;&lt;br /&gt;
        % (installdir, session, fnsrc, fndest, subdir)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    import doctest&lt;br /&gt;
    doctest.testmod()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: STiNE]]&lt;/div&gt;</summary>
		<author><name>Blackmole</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5931</id>
		<title>STiNE-filetransfer.exe</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5931"/>
		<updated>2008-09-25T01:06:37Z</updated>

		<summary type="html">&lt;p&gt;Blackmole: Zeichenliste deutlich ergänzt (sowohl Tabellen als Python-Modul)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der verschleierten URL ==&lt;br /&gt;
/scripts/filetransfer.exe?[lange hexzeichenkette]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Klartext-URL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=[Session-ID 15N]&amp;amp;fnsrc=f[15N (bei mir alle 15N, evt. auch mehr/weniger)].cache&amp;amp;fndest=[Auslieferungsdateiname]&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel einer gültigen URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Hexzeichenkette ==&lt;br /&gt;
Es wird ein einfaches Substitutionsverfahren verwendet. Jedes Zeichen wird durch einen vierstelligen Hexcode ersetzt. Eventuell ist hier noch ein Muster drin, momentan ist jedoch keines bekannt.&lt;br /&gt;
=== Ersetzungstabelle ===&lt;br /&gt;
Die Liste ist nun zum größten Teil vollständig. Es fehlt noch das Leerzeichen sowie eher ungebräuchlichere ASCII-Codes, insbesondere Steuerzeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Zahlen ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 8977 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || 1&lt;br /&gt;
|-&lt;br /&gt;
| a8b1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3dc2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3b98 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 4423 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 6950 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 9ee7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 7678 || 8&lt;br /&gt;
|-&lt;br /&gt;
| ac3b || 9&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Großbuchstaben ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 478b || A&lt;br /&gt;
|-&lt;br /&gt;
| 76fd || B&lt;br /&gt;
|-&lt;br /&gt;
| 4886 || C&lt;br /&gt;
|-&lt;br /&gt;
| 92d1 || D&lt;br /&gt;
|-&lt;br /&gt;
| 3ace || E&lt;br /&gt;
|-&lt;br /&gt;
| 3322 || F&lt;br /&gt;
|-&lt;br /&gt;
| 4b34 || G&lt;br /&gt;
|-&lt;br /&gt;
| b7f7 || H&lt;br /&gt;
|-&lt;br /&gt;
| a4bf || I&lt;br /&gt;
|-&lt;br /&gt;
| a59e || J&lt;br /&gt;
|-&lt;br /&gt;
| 2331 || K&lt;br /&gt;
|-&lt;br /&gt;
| b90e || L&lt;br /&gt;
|-&lt;br /&gt;
| 6296 || M&lt;br /&gt;
|-&lt;br /&gt;
| 81e8 || O&lt;br /&gt;
|-&lt;br /&gt;
| 9eb8 || P&lt;br /&gt;
|-&lt;br /&gt;
| 0d21 || Q&lt;br /&gt;
|-&lt;br /&gt;
| 5a84 || R&lt;br /&gt;
|-&lt;br /&gt;
| 9396 || S&lt;br /&gt;
|-&lt;br /&gt;
| 642a || T&lt;br /&gt;
|-&lt;br /&gt;
| 0682 || U&lt;br /&gt;
|-&lt;br /&gt;
| 7df7 || V&lt;br /&gt;
|-&lt;br /&gt;
| 0a17 || W&lt;br /&gt;
|-&lt;br /&gt;
| a14e || X&lt;br /&gt;
|-&lt;br /&gt;
| 284a || Y&lt;br /&gt;
|-&lt;br /&gt;
| a2ec || Z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Kleinbuchstaben ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 781f || a&lt;br /&gt;
|-&lt;br /&gt;
| a007 || b&lt;br /&gt;
|-&lt;br /&gt;
| 7abe || c&lt;br /&gt;
|-&lt;br /&gt;
| b84f || d&lt;br /&gt;
|-&lt;br /&gt;
| b91d || e&lt;br /&gt;
|-&lt;br /&gt;
| 2104 || f&lt;br /&gt;
|-&lt;br /&gt;
| 94f2 || g&lt;br /&gt;
|-&lt;br /&gt;
| 6e19 || h&lt;br /&gt;
|-&lt;br /&gt;
| 644d || i&lt;br /&gt;
|-&lt;br /&gt;
| 2cba || k&lt;br /&gt;
|-&lt;br /&gt;
| 2906 || l&lt;br /&gt;
|-&lt;br /&gt;
| 8606 || m&lt;br /&gt;
|-&lt;br /&gt;
| 46df || n&lt;br /&gt;
|-&lt;br /&gt;
| 2d78 || o&lt;br /&gt;
|-&lt;br /&gt;
| 15c8 || p&lt;br /&gt;
|-&lt;br /&gt;
| 8be3 || q&lt;br /&gt;
|-&lt;br /&gt;
| 7b4f || r&lt;br /&gt;
|-&lt;br /&gt;
| 27c2 || s&lt;br /&gt;
|-&lt;br /&gt;
| 04c6 || t&lt;br /&gt;
|-&lt;br /&gt;
| 98cb || u&lt;br /&gt;
|-&lt;br /&gt;
| 6141 || v&lt;br /&gt;
|-&lt;br /&gt;
| 06db || w&lt;br /&gt;
|-&lt;br /&gt;
| 594e || x&lt;br /&gt;
|-&lt;br /&gt;
| 5977 || y&lt;br /&gt;
|-&lt;br /&gt;
| 9d29 || z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Sonderzeichen ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 432b || !&lt;br /&gt;
|-&lt;br /&gt;
| 7c0c || #&lt;br /&gt;
|-&lt;br /&gt;
| 62da || $&lt;br /&gt;
|-&lt;br /&gt;
| 112f || %&lt;br /&gt;
|-&lt;br /&gt;
| 0e27 || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| 0409 || &#039;&lt;br /&gt;
|-&lt;br /&gt;
| 2692 || (&lt;br /&gt;
|-&lt;br /&gt;
| 6b27 || )&lt;br /&gt;
|-&lt;br /&gt;
| 5721 || *&lt;br /&gt;
|-&lt;br /&gt;
| 56fd || +&lt;br /&gt;
|-&lt;br /&gt;
| 789b || ,&lt;br /&gt;
|-&lt;br /&gt;
| aeb7 || -&lt;br /&gt;
|-&lt;br /&gt;
| 6e93 || .&lt;br /&gt;
|-&lt;br /&gt;
| a837 || /&lt;br /&gt;
|-&lt;br /&gt;
| 54e5 || ;&lt;br /&gt;
|-&lt;br /&gt;
| 76b1 || &amp;lt;&lt;br /&gt;
|-&lt;br /&gt;
| 3dd0 || =&lt;br /&gt;
|-&lt;br /&gt;
| 7b44 || &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 923d || @&lt;br /&gt;
|-&lt;br /&gt;
| 493f || [&lt;br /&gt;
|-&lt;br /&gt;
| 6a15 || ]&lt;br /&gt;
|-&lt;br /&gt;
| 8991 || ^&lt;br /&gt;
|-&lt;br /&gt;
| 6873 || _&lt;br /&gt;
|-&lt;br /&gt;
| 51ed || `&lt;br /&gt;
|-&lt;br /&gt;
| 45ea || {&lt;br /&gt;
|-&lt;br /&gt;
| 1d54 || &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2545 || }&lt;br /&gt;
|-&lt;br /&gt;
| 4092 || ~&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Umlaute ====&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 3240 || Ä&lt;br /&gt;
|-&lt;br /&gt;
| 28b7 || Ö&lt;br /&gt;
|-&lt;br /&gt;
| 3ada || Ü&lt;br /&gt;
|-&lt;br /&gt;
| 8c24 || ä&lt;br /&gt;
|-&lt;br /&gt;
| 16da || ö&lt;br /&gt;
|-&lt;br /&gt;
| 4a5b || ü&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python-Modul zum verschleiern/entschleiern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
STiNE filetransfer.exe decoder/encoder&lt;br /&gt;
Copyright (c) 2008 Henning Pridöhl&lt;br /&gt;
MIT License - http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
This module is for decoding and encoding of the filetransfer.exe parameter&lt;br /&gt;
of STiNE. It consists of three functions:&lt;br /&gt;
1) string encoded_parameter encode_transfer(string query_string)&lt;br /&gt;
2) string decoded_query_string decode_transfer(string encoded_parameter)&lt;br /&gt;
3) string encoded_parameter build_transfer(&lt;br /&gt;
    session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;)&lt;br /&gt;
    &lt;br /&gt;
Please note that the code table doesn&#039;t contain the complete ASCII!&lt;br /&gt;
Feel free to add missing codes.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Encoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;)&lt;br /&gt;
&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333090280767182&amp;amp;fnsrc=f333043751172556.cache&amp;amp;fndest=OnlineKontrollausdruck.pdf&amp;amp;subdir=temp&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding with unknown codes results in &#039;?&#039; (f00b is unknown)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;f00b781f7b4f&#039;)&lt;br /&gt;
&#039;?ar&#039;&lt;br /&gt;
&lt;br /&gt;
Building the transfer easily&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; build_transfer(333090280767182, &#039;f333043751172556.cache&#039;, &#039;OnlineKontrollausdruck.pdf&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b8977a8b1767889779ee769509ee720187678a8b10e27210446df27c27b4f7abe3dd021043dc23dc23dc289773b983dc29ee74423201820189ee7a8b14423442369506e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d23312d7846df04c67b4f2d7829062906781f98cb27c2b84f7b4f98cb7abe2cba6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Debug decoding (e.g. for adding new codes to the code table)&lt;br /&gt;
Just join the result with &amp;quot;\n&amp;quot; and display it :)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;, True)&lt;br /&gt;
(&#039;2104 2d78 2d78 a007 781f 7b4f&#039;, &#039;f    o    o    b    a    r   &#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
code_table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
8977 0&lt;br /&gt;
2018 1&lt;br /&gt;
a8b1 2&lt;br /&gt;
3dc2 3&lt;br /&gt;
3b98 4&lt;br /&gt;
4423 5&lt;br /&gt;
6950 6&lt;br /&gt;
9ee7 7&lt;br /&gt;
7678 8&lt;br /&gt;
ac3b 9&lt;br /&gt;
478b A&lt;br /&gt;
76fd B&lt;br /&gt;
4886 C&lt;br /&gt;
92d1 D&lt;br /&gt;
3ace E&lt;br /&gt;
3322 F&lt;br /&gt;
4b34 G&lt;br /&gt;
b7f7 H&lt;br /&gt;
a4bf I&lt;br /&gt;
a59e J&lt;br /&gt;
2331 K&lt;br /&gt;
b90e L&lt;br /&gt;
6296 M&lt;br /&gt;
81e8 O&lt;br /&gt;
9eb8 P&lt;br /&gt;
0d21 Q&lt;br /&gt;
5a84 R&lt;br /&gt;
9396 S&lt;br /&gt;
642a T&lt;br /&gt;
0682 U&lt;br /&gt;
7df7 V&lt;br /&gt;
0a17 W&lt;br /&gt;
a14e X&lt;br /&gt;
284a Y&lt;br /&gt;
a2ec Z&lt;br /&gt;
781f a&lt;br /&gt;
a007 b&lt;br /&gt;
7abe c&lt;br /&gt;
b84f d&lt;br /&gt;
b91d e&lt;br /&gt;
2104 f&lt;br /&gt;
94f2 g&lt;br /&gt;
6e19 h&lt;br /&gt;
644d i&lt;br /&gt;
2cba k&lt;br /&gt;
2906 l&lt;br /&gt;
8606 m&lt;br /&gt;
46df n&lt;br /&gt;
2d78 o&lt;br /&gt;
15c8 p&lt;br /&gt;
8be3 q&lt;br /&gt;
7b4f r&lt;br /&gt;
27c2 s&lt;br /&gt;
04c6 t&lt;br /&gt;
98cb u&lt;br /&gt;
6141 v&lt;br /&gt;
06db w&lt;br /&gt;
594e x&lt;br /&gt;
5977 y&lt;br /&gt;
9d29 z&lt;br /&gt;
432b !&lt;br /&gt;
7c0c #&lt;br /&gt;
62da $&lt;br /&gt;
112f %&lt;br /&gt;
0e27 &amp;amp;&lt;br /&gt;
0409 &#039;&lt;br /&gt;
2692 (&lt;br /&gt;
6b27 )&lt;br /&gt;
5721 *&lt;br /&gt;
56fd +&lt;br /&gt;
789b ,&lt;br /&gt;
aeb7 -&lt;br /&gt;
6e93 .&lt;br /&gt;
a837 /&lt;br /&gt;
54e5 ;&lt;br /&gt;
76b1 &amp;lt;&lt;br /&gt;
3dd0 =&lt;br /&gt;
7b44 &amp;gt;&lt;br /&gt;
923d @&lt;br /&gt;
493f [&lt;br /&gt;
6a15 ]&lt;br /&gt;
8991 ^&lt;br /&gt;
6873 _&lt;br /&gt;
51ed `&lt;br /&gt;
45ea {&lt;br /&gt;
1d54 |&lt;br /&gt;
2545 }&lt;br /&gt;
4092 ~&lt;br /&gt;
3240 Ä&lt;br /&gt;
28b7 Ö&lt;br /&gt;
3ada Ü&lt;br /&gt;
8c24 ä&lt;br /&gt;
16da ö&lt;br /&gt;
4a5b ü&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.strip()&lt;br /&gt;
&lt;br /&gt;
decode_dict = {}&lt;br /&gt;
encode_dict = {}&lt;br /&gt;
for line in code_table.split(&#039;\n&#039;):&lt;br /&gt;
    code, char = line.split()&lt;br /&gt;
    decode_dict[code] = char&lt;br /&gt;
    encode_dict[char] = code&lt;br /&gt;
    &lt;br /&gt;
del code_table&lt;br /&gt;
&lt;br /&gt;
def encode_transfer(plain):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Encodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;foobar&#039;)&lt;br /&gt;
    &#039;21042d782d78a007781f7b4f&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &#039;&#039;.join([encode_dict.get(x, &#039;????&#039;) for x in plain])&lt;br /&gt;
&lt;br /&gt;
def decode_transfer(encoded, debug=False):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Decodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;)&lt;br /&gt;
    &#039;foobar&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    encoded = encoded.replace(&#039;https://www.stine.uni-hamburg.de/scripts/&#039;, &#039;&#039;) \&lt;br /&gt;
                     .replace(&#039;filetransfer.exe?&#039;, &#039;&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        if len(encoded) % 4 != 0:&lt;br /&gt;
            raise&lt;br /&gt;
        if not debug:&lt;br /&gt;
            return &#039;&#039;.join([decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                            for i in xrange(len(encoded)/4)])&lt;br /&gt;
        else:&lt;br /&gt;
            return (&lt;br /&gt;
                &#039; &#039;.join([encoded[i*4:(i+1)*4]&lt;br /&gt;
                          for i in xrange(len(encoded)/4)]),&lt;br /&gt;
                &#039; &#039;.join([&#039;%s   &#039; % decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                          for i in xrange(len(encoded)/4)])&lt;br /&gt;
            )&lt;br /&gt;
    except:&lt;br /&gt;
        raise ValueError(&#039;encoded string is malformed!&#039;)&lt;br /&gt;
&lt;br /&gt;
def build_transfer(session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Builds an transfer name by given url parameters&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import hashlib; hashlib.sha1(&lt;br /&gt;
    ...     build_transfer(333090280767182, &#039;f00.cache&#039;, &#039;foo.pdf&#039;)&lt;br /&gt;
    ... ).hexdigest()&lt;br /&gt;
    &#039;c6fa3a7e5cdf544f2d01978d084ea0e4aca6beb3&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return encode_transfer(&lt;br /&gt;
        &#039;mode=download&amp;amp;installdir=%s&amp;amp;session=%s&amp;amp;fnsrc=%s&amp;amp;fndest=%s&amp;amp;subdir=%s&#039;&lt;br /&gt;
        % (installdir, session, fnsrc, fndest, subdir)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    import doctest&lt;br /&gt;
    doctest.testmod()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: STiNE]]&lt;/div&gt;</summary>
		<author><name>Blackmole</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5930</id>
		<title>STiNE-filetransfer.exe</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5930"/>
		<updated>2008-09-24T17:23:58Z</updated>

		<summary type="html">&lt;p&gt;Blackmole: Bugfix Python-Modul: mode=downloads =&amp;gt; mode=download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der verschleierten URL ==&lt;br /&gt;
/scripts/filetransfer.exe?[lange hexzeichenkette]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Klartext-URL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=[Session-ID 15N]&amp;amp;fnsrc=f[15N (bei mir alle 15N, evt. auch mehr/weniger)].cache&amp;amp;fndest=[Auslieferungsdateiname]&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel einer gültigen URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Hexzeichenkette ==&lt;br /&gt;
Es wird ein einfaches Substitutionsverfahren verwendet. Jedes Zeichen wird durch einen vierstelligen Hexcode ersetzt. Eventuell ist hier noch ein Muster drin, momentan ist jedoch keines bekannt.&lt;br /&gt;
=== Ersetzungstabelle ===&lt;br /&gt;
Diese Tabelle ist nicht vollständig, sie enthält nur einen Teil des ASCII! Ergänzungen werden gerne gesehen, bitte dann auch das Python-Modul ergänzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Sonderzeichen ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 0e27 || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| 6e93 || .&lt;br /&gt;
|-&lt;br /&gt;
| a837 || /&lt;br /&gt;
|-&lt;br /&gt;
| 3dd0 || =&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Zahlen ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 8977 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || 1&lt;br /&gt;
|-&lt;br /&gt;
| a8b1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3dc2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3b98 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 4423 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 6950 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 9ee7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 7678 || 8&lt;br /&gt;
|-&lt;br /&gt;
| ac3b || 9&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Großbuchstaben ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 76fd || B&lt;br /&gt;
|-&lt;br /&gt;
| a4bf || I&lt;br /&gt;
|-&lt;br /&gt;
| 2331 || K&lt;br /&gt;
|-&lt;br /&gt;
| 81e8 || O&lt;br /&gt;
|-&lt;br /&gt;
| 9396 || S&lt;br /&gt;
|-&lt;br /&gt;
| 7df7 || V&lt;br /&gt;
|-&lt;br /&gt;
| 0a17 || W&lt;br /&gt;
|-&lt;br /&gt;
| a2ec || Z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
==== Kleinbuchstaben ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 781f || a&lt;br /&gt;
|-&lt;br /&gt;
| a007 || b&lt;br /&gt;
|-&lt;br /&gt;
| 7abe || c&lt;br /&gt;
|-&lt;br /&gt;
| b84f || d&lt;br /&gt;
|-&lt;br /&gt;
| b91d || e&lt;br /&gt;
|-&lt;br /&gt;
| 2104 || f&lt;br /&gt;
|-&lt;br /&gt;
| 94f2 || g&lt;br /&gt;
|-&lt;br /&gt;
| 6e19 || h&lt;br /&gt;
|-&lt;br /&gt;
| 644d || i&lt;br /&gt;
|-&lt;br /&gt;
| 2cba || k&lt;br /&gt;
|-&lt;br /&gt;
| 2906 || l&lt;br /&gt;
|-&lt;br /&gt;
| 8606 || m&lt;br /&gt;
|-&lt;br /&gt;
| 46df || n&lt;br /&gt;
|-&lt;br /&gt;
| 2d78 || o&lt;br /&gt;
|-&lt;br /&gt;
| 15c8 || p&lt;br /&gt;
|-&lt;br /&gt;
| 7b4f || r&lt;br /&gt;
|-&lt;br /&gt;
| 27c2 || s&lt;br /&gt;
|-&lt;br /&gt;
| 04c6 || t&lt;br /&gt;
|-&lt;br /&gt;
| 98cb || u&lt;br /&gt;
|-&lt;br /&gt;
| 06db || w&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python-Modul zum verschleiern/entschleiern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
STiNE filetransfer.exe decoder/encoder&lt;br /&gt;
Copyright (c) 2008 Henning Pridöhl&lt;br /&gt;
MIT License - http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
This module is for decoding and encoding of the filetransfer.exe parameter&lt;br /&gt;
of STiNE. It consists of three functions:&lt;br /&gt;
1) string encoded_parameter encode_transfer(string query_string)&lt;br /&gt;
2) string decoded_query_string decode_transfer(string encoded_parameter)&lt;br /&gt;
3) string encoded_parameter build_transfer(&lt;br /&gt;
    session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;)&lt;br /&gt;
    &lt;br /&gt;
Please note that the code table doesn&#039;t contain the complete ASCII!&lt;br /&gt;
Feel free to add missing codes.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Encoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;)&lt;br /&gt;
&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&#039;&lt;br /&gt;
&lt;br /&gt;
Building the transfer easily&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; build_transfer(333095970339915, &#039;f332804257938329.cache&#039;, &#039;OnlineBeitragsbescheid.pdf&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f27c20e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Debug decoding (e.g. for adding new codes to the code table)&lt;br /&gt;
Just join the result with &amp;quot;\n&amp;quot; and display it :)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;, True)&lt;br /&gt;
(&#039;2104 2d78 2d78 a007 781f 7b4f&#039;, &#039;f    o    o    b    a    r   &#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
code_table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0e27 &amp;amp;&lt;br /&gt;
6e93 .&lt;br /&gt;
a837 /&lt;br /&gt;
8977 0&lt;br /&gt;
2018 1&lt;br /&gt;
a8b1 2&lt;br /&gt;
3dc2 3&lt;br /&gt;
3b98 4&lt;br /&gt;
4423 5&lt;br /&gt;
6950 6&lt;br /&gt;
9ee7 7&lt;br /&gt;
7678 8&lt;br /&gt;
ac3b 9&lt;br /&gt;
3dd0 =&lt;br /&gt;
76fd B&lt;br /&gt;
a4bf I&lt;br /&gt;
2331 K&lt;br /&gt;
81e8 O&lt;br /&gt;
9396 S&lt;br /&gt;
7df7 V&lt;br /&gt;
0a17 W&lt;br /&gt;
a2ec Z&lt;br /&gt;
781f a&lt;br /&gt;
a007 b&lt;br /&gt;
7abe c&lt;br /&gt;
b84f d&lt;br /&gt;
b91d e&lt;br /&gt;
2104 f&lt;br /&gt;
94f2 g&lt;br /&gt;
6e19 h&lt;br /&gt;
644d i&lt;br /&gt;
2cba k&lt;br /&gt;
2906 l&lt;br /&gt;
8606 m&lt;br /&gt;
46df n&lt;br /&gt;
2d78 o&lt;br /&gt;
15c8 p&lt;br /&gt;
7b4f r&lt;br /&gt;
27c2 s&lt;br /&gt;
04c6 t&lt;br /&gt;
98cb u&lt;br /&gt;
06db w&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.strip()&lt;br /&gt;
&lt;br /&gt;
decode_dict = {}&lt;br /&gt;
encode_dict = {}&lt;br /&gt;
for line in code_table.split(&#039;\n&#039;):&lt;br /&gt;
    code, char = line.split()&lt;br /&gt;
    decode_dict[code] = char&lt;br /&gt;
    encode_dict[char] = code&lt;br /&gt;
    &lt;br /&gt;
del code_table&lt;br /&gt;
&lt;br /&gt;
def encode_transfer(plain):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Encodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;foobar&#039;)&lt;br /&gt;
    &#039;21042d782d78a007781f7b4f&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &#039;&#039;.join([encode_dict.get(x, &#039;????&#039;) for x in plain])&lt;br /&gt;
&lt;br /&gt;
def decode_transfer(encoded, debug=False):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Decodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;)&lt;br /&gt;
    &#039;foobar&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    encoded = encoded.replace(&#039;https://www.stine.uni-hamburg.de/scripts/&#039;, &#039;&#039;) \&lt;br /&gt;
                     .replace(&#039;filetransfer.exe?&#039;, &#039;&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        if len(encoded) % 4 != 0:&lt;br /&gt;
            raise&lt;br /&gt;
        if not debug:&lt;br /&gt;
            return &#039;&#039;.join([decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                            for i in xrange(len(encoded)/4)])&lt;br /&gt;
        else:&lt;br /&gt;
            return (&lt;br /&gt;
                &#039; &#039;.join([encoded[i*4:(i+1)*4]&lt;br /&gt;
                          for i in xrange(len(encoded)/4)]),&lt;br /&gt;
                &#039; &#039;.join([&#039;%s   &#039; % decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                          for i in xrange(len(encoded)/4)])&lt;br /&gt;
            )&lt;br /&gt;
    except:&lt;br /&gt;
        raise ValueError(&#039;encoded string is malformed!&#039;)&lt;br /&gt;
&lt;br /&gt;
def build_transfer(session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Builds an transfer name by given url parameters&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import hashlib; hashlib.sha1(&lt;br /&gt;
    ...     build_transfer(333090280767182, &#039;f00.cache&#039;, &#039;foo.pdf&#039;)&lt;br /&gt;
    ... ).hexdigest()&lt;br /&gt;
    &#039;aa984c9bdf8d447f6a2845c0116cb9775cb1f779&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return encode_transfer(&lt;br /&gt;
        &#039;mode=download&amp;amp;installdir=%s&amp;amp;session=%s&amp;amp;fnsrc=%s&amp;amp;fndest=%s&amp;amp;subdir=%s&#039;&lt;br /&gt;
        % (installdir, session, fnsrc, fndest, subdir)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    import doctest&lt;br /&gt;
    doctest.testmod()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: STiNE]]&lt;/div&gt;</summary>
		<author><name>Blackmole</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5929</id>
		<title>STiNE-filetransfer.exe</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=STiNE-filetransfer.exe&amp;diff=5929"/>
		<updated>2008-09-24T15:23:18Z</updated>

		<summary type="html">&lt;p&gt;Blackmole: Die Seite wurde neu angelegt: Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.  == Aufba...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Dokumente unter dem Menüpunkt &amp;quot;Meine Dokumente&amp;quot; werden von der filetransfer.exe (https://www.stine.uni-hamburg.de/scripts/filetransfer.exe) ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der verschleierten URL ==&lt;br /&gt;
/scripts/filetransfer.exe?[lange hexzeichenkette]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Klartext-URL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=[Session-ID 15N]&amp;amp;fnsrc=f[15N (bei mir alle 15N, evt. auch mehr/weniger)].cache&amp;amp;fndest=[Auslieferungsdateiname]&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel einer gültigen URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Hexzeichenkette ==&lt;br /&gt;
Es wird ein einfaches Substitutionsverfahren verwendet. Jedes Zeichen wird durch einen vierstelligen Hexcode ersetzt. Eventuell ist hier noch ein Muster drin, momentan ist jedoch keines bekannt.&lt;br /&gt;
=== Ersetzungstabelle ===&lt;br /&gt;
Diese Tabelle ist nicht vollständig, sie enthält nur einen Teil des ASCII! Ergänzungen werden gerne gesehen, bitte dann auch das Python-Modul ergänzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Sonderzeichen ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 0e27 || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| 6e93 || .&lt;br /&gt;
|-&lt;br /&gt;
| a837 || /&lt;br /&gt;
|-&lt;br /&gt;
| 3dd0 || =&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Zahlen ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 8977 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || 1&lt;br /&gt;
|-&lt;br /&gt;
| a8b1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3dc2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3b98 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 4423 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 6950 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 9ee7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 7678 || 8&lt;br /&gt;
|-&lt;br /&gt;
| ac3b || 9&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:20px;&amp;quot;&amp;gt;&lt;br /&gt;
==== Großbuchstaben ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 76fd || B&lt;br /&gt;
|-&lt;br /&gt;
| a4bf || I&lt;br /&gt;
|-&lt;br /&gt;
| 2331 || K&lt;br /&gt;
|-&lt;br /&gt;
| 81e8 || O&lt;br /&gt;
|-&lt;br /&gt;
| 9396 || S&lt;br /&gt;
|-&lt;br /&gt;
| 7df7 || V&lt;br /&gt;
|-&lt;br /&gt;
| 0a17 || W&lt;br /&gt;
|-&lt;br /&gt;
| a2ec || Z&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
==== Kleinbuchstaben ====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Code !! Zeichen&lt;br /&gt;
|-&lt;br /&gt;
| 781f || a&lt;br /&gt;
|-&lt;br /&gt;
| a007 || b&lt;br /&gt;
|-&lt;br /&gt;
| 7abe || c&lt;br /&gt;
|-&lt;br /&gt;
| b84f || d&lt;br /&gt;
|-&lt;br /&gt;
| b91d || e&lt;br /&gt;
|-&lt;br /&gt;
| 2104 || f&lt;br /&gt;
|-&lt;br /&gt;
| 94f2 || g&lt;br /&gt;
|-&lt;br /&gt;
| 6e19 || h&lt;br /&gt;
|-&lt;br /&gt;
| 644d || i&lt;br /&gt;
|-&lt;br /&gt;
| 2cba || k&lt;br /&gt;
|-&lt;br /&gt;
| 2906 || l&lt;br /&gt;
|-&lt;br /&gt;
| 8606 || m&lt;br /&gt;
|-&lt;br /&gt;
| 46df || n&lt;br /&gt;
|-&lt;br /&gt;
| 2d78 || o&lt;br /&gt;
|-&lt;br /&gt;
| 15c8 || p&lt;br /&gt;
|-&lt;br /&gt;
| 7b4f || r&lt;br /&gt;
|-&lt;br /&gt;
| 27c2 || s&lt;br /&gt;
|-&lt;br /&gt;
| 04c6 || t&lt;br /&gt;
|-&lt;br /&gt;
| 98cb || u&lt;br /&gt;
|-&lt;br /&gt;
| 06db || w&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python-Modul zum verschleiern/entschleiern ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
STiNE filetransfer.exe decoder/encoder&lt;br /&gt;
Copyright (c) 2008 Henning Pridöhl&lt;br /&gt;
MIT License - http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
This module is for decoding and encoding of the filetransfer.exe parameter&lt;br /&gt;
of STiNE. It consists of three functions:&lt;br /&gt;
1) string encoded_parameter encode_transfer(string query_string)&lt;br /&gt;
2) string decoded_query_string decode_transfer(string encoded_parameter)&lt;br /&gt;
3) string encoded_parameter build_transfer(&lt;br /&gt;
    session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;)&lt;br /&gt;
    &lt;br /&gt;
Please note that the code table doesn&#039;t contain the complete ASCII!&lt;br /&gt;
Feel free to add missing codes.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Encoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Decoding:&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f0e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;)&lt;br /&gt;
&#039;mode=download&amp;amp;installdir=./&amp;amp;session=333095970339915&amp;amp;fnsrc=f332804257938329.cache&amp;amp;fndest=OnlineBeitragsbescheid.pdf&amp;amp;subdir=temp&#039;&lt;br /&gt;
&lt;br /&gt;
Building the transfer easily&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; build_transfer(333095970339915, &#039;f332804257938329.cache&#039;, &#039;OnlineBeitragsbescheid.pdf&#039;)&lt;br /&gt;
&#039;86062d78b84fb91d3dd0b84f2d7806db46df29062d78781fb84f27c20e27644d46df27c204c6781f29062906b84f644d7b4f3dd06e93a8370e2727c2b91d27c227c2644d2d7846df3dd03dc23dc23dc28977ac3b4423ac3b9ee789773dc23dc2ac3bac3b201844230e27210446df27c27b4f7abe3dd021043dc23dc2a8b1767889773b98a8b144239ee7ac3b3dc276783dc2a8b1ac3b6e937abe781f7abe6e19b91d0e27210446dfb84fb91d27c204c63dd081e846df2906644d46dfb91d76fdb91d644d04c67b4f781f94f227c2a007b91d27c27abe6e19b91d644db84f6e9315c8b84f21040e2727c298cba007b84f644d7b4f3dd004c6b91d860615c8&#039;&lt;br /&gt;
&lt;br /&gt;
Debug decoding (e.g. for adding new codes to the code table)&lt;br /&gt;
Just join the result with &amp;quot;\n&amp;quot; and display it :)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;, True)&lt;br /&gt;
(&#039;2104 2d78 2d78 a007 781f 7b4f&#039;, &#039;f    o    o    b    a    r   &#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
code_table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0e27 &amp;amp;&lt;br /&gt;
6e93 .&lt;br /&gt;
a837 /&lt;br /&gt;
8977 0&lt;br /&gt;
2018 1&lt;br /&gt;
a8b1 2&lt;br /&gt;
3dc2 3&lt;br /&gt;
3b98 4&lt;br /&gt;
4423 5&lt;br /&gt;
6950 6&lt;br /&gt;
9ee7 7&lt;br /&gt;
7678 8&lt;br /&gt;
ac3b 9&lt;br /&gt;
3dd0 =&lt;br /&gt;
76fd B&lt;br /&gt;
a4bf I&lt;br /&gt;
2331 K&lt;br /&gt;
81e8 O&lt;br /&gt;
9396 S&lt;br /&gt;
7df7 V&lt;br /&gt;
0a17 W&lt;br /&gt;
a2ec Z&lt;br /&gt;
781f a&lt;br /&gt;
a007 b&lt;br /&gt;
7abe c&lt;br /&gt;
b84f d&lt;br /&gt;
b91d e&lt;br /&gt;
2104 f&lt;br /&gt;
94f2 g&lt;br /&gt;
6e19 h&lt;br /&gt;
644d i&lt;br /&gt;
2cba k&lt;br /&gt;
2906 l&lt;br /&gt;
8606 m&lt;br /&gt;
46df n&lt;br /&gt;
2d78 o&lt;br /&gt;
15c8 p&lt;br /&gt;
7b4f r&lt;br /&gt;
27c2 s&lt;br /&gt;
04c6 t&lt;br /&gt;
98cb u&lt;br /&gt;
06db w&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.strip()&lt;br /&gt;
&lt;br /&gt;
decode_dict = {}&lt;br /&gt;
encode_dict = {}&lt;br /&gt;
for line in code_table.split(&#039;\n&#039;):&lt;br /&gt;
    code, char = line.split()&lt;br /&gt;
    decode_dict[code] = char&lt;br /&gt;
    encode_dict[char] = code&lt;br /&gt;
    &lt;br /&gt;
del code_table&lt;br /&gt;
&lt;br /&gt;
def encode_transfer(plain):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Encodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; encode_transfer(&#039;foobar&#039;)&lt;br /&gt;
    &#039;21042d782d78a007781f7b4f&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &#039;&#039;.join([encode_dict.get(x, &#039;????&#039;) for x in plain])&lt;br /&gt;
&lt;br /&gt;
def decode_transfer(encoded, debug=False):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Decodes a transfer name&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; decode_transfer(&#039;21042d782d78a007781f7b4f&#039;)&lt;br /&gt;
    &#039;foobar&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    encoded = encoded.replace(&#039;https://www.stine.uni-hamburg.de/scripts/&#039;, &#039;&#039;) \&lt;br /&gt;
                     .replace(&#039;filetransfer.exe?&#039;, &#039;&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        if len(encoded) % 4 != 0:&lt;br /&gt;
            raise&lt;br /&gt;
        if not debug:&lt;br /&gt;
            return &#039;&#039;.join([decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                            for i in xrange(len(encoded)/4)])&lt;br /&gt;
        else:&lt;br /&gt;
            return (&lt;br /&gt;
                &#039; &#039;.join([encoded[i*4:(i+1)*4]&lt;br /&gt;
                          for i in xrange(len(encoded)/4)]),&lt;br /&gt;
                &#039; &#039;.join([&#039;%s   &#039; % decode_dict.get(encoded[i*4:(i+1)*4], &#039;?&#039;)&lt;br /&gt;
                          for i in xrange(len(encoded)/4)])&lt;br /&gt;
            )&lt;br /&gt;
    except:&lt;br /&gt;
        raise ValueError(&#039;encoded string is malformed!&#039;)&lt;br /&gt;
&lt;br /&gt;
def build_transfer(session, fnsrc, fndest, installdir=&#039;./&#039;, subdir=&#039;temp&#039;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Builds an transfer name by given url parameters&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import hashlib; hashlib.sha1(&lt;br /&gt;
    ...     build_transfer(333090280767182, &#039;f00.cache&#039;, &#039;foo.pdf&#039;)&lt;br /&gt;
    ... ).hexdigest()&lt;br /&gt;
    &#039;aa984c9bdf8d447f6a2845c0116cb9775cb1f779&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return encode_transfer(&lt;br /&gt;
        &#039;mode=downloads&amp;amp;installdir=%s&amp;amp;session=%s&amp;amp;fnsrc=%s&amp;amp;fndest=%s&amp;amp;subdir=%s&#039;&lt;br /&gt;
        % (installdir, session, fnsrc, fndest, subdir)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    import doctest&lt;br /&gt;
    doctest.testmod()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: STiNE]]&lt;/div&gt;</summary>
		<author><name>Blackmole</name></author>
	</entry>
</feed>