Latest posts on Закодировать число в виде строки topichttp://python.su/forum/topic/35269/2018-05-18T12:21:53+03:00Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-18T12:21:53+03:00Rodegast192267Обычно для такого base64 используют.<br/><div class="code"><pre> <span class="o">>>></span> <span class="kn">import</span> <span class="nn">base64</span>
<span class="o">>>></span> <span class="n">base64</span><span class="o">.</span><span class="n">encodestring</span><span class="p">(</span><span class="s2">"100"</span><span class="p">)</span>
<span class="s1">'MTAw</span><span class="se">\n</span><span class="s1">'</span>
<span class="o">>>></span> <span class="n">s</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">encodestring</span><span class="p">(</span><span class="s2">"100"</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">base64</span><span class="o">.</span><span class="n">decodestring</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="s1">'100'</span>
</pre></div>
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-18T11:16:28+03:00Elaphe192266Так и сделаю. Всем спасибо.
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-18T01:20:58+03:00py.user.next192259<blockquote><em>Elaphe</em><br/>То есть нужны две функции, способные айдишник в виде int перевести в строку и обратно:<br/>encode: 32 => 3dhRf2nmj<br/>decode: 3dhRf2nmj => 32</blockquote>Простой маппинг по словарю туда и обратно подойдёт. Фиксированные цифры в фиксированные последовательности букв.<br/><div class="code"><pre>
<span class="o">>>></span> <span class="n">dw</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'1'</span><span class="p">:</span> <span class="s1">'ab'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">:</span> <span class="s1">'xr'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">wd</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">dw</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="o">>>></span>
<span class="o">>>></span> <span class="n">dw</span>
<span class="p">{</span><span class="s1">'1'</span><span class="p">:</span> <span class="s1">'ab'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">:</span> <span class="s1">'xr'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">wd</span>
<span class="p">{</span><span class="s1">'ab'</span><span class="p">:</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'xr'</span><span class="p">:</span> <span class="s1">'2'</span><span class="p">}</span>
<span class="o">>>></span>
</pre></div>Если словесные длины зафиксируешь, то можно будет брать по два символа и отыскивать их в словаре пар (слово, цифра). Если словесные длины не зафиксируешь, надо будет накапливать слово и после каждого нового символа искать слово в словаре.<br/><br/>У цифр длина последовательности символов всегда равна единице. У слов длина последовательности символов в данном случае равна двум (это для удобства обратного преобразования сделано). Можно длину слов варьировать, тогда трансляция из слова в цифру просто немного усложнится алгоритмически.
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-17T20:45:03+03:00vic57192254скорей всего никому не надо. да и что мешает ключи сгенерить?<br/><div class="code"><pre> <span class="o">>>></span> <span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">sample</span>
<span class="o">>>></span> <span class="n">l</span> <span class="o">=</span> <span class="s1">'qwerty0987654321'</span>
<span class="o">>>></span> <span class="n">d</span> <span class="o">=</span> <span class="p">[{</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sample</span><span class="p">(</span><span class="n">l</span><span class="p">,</span><span class="mi">8</span><span class="p">)):</span><span class="n">i</span><span class="p">}</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span>
<span class="o">>>></span> <span class="n">d</span>
<span class="p">[{</span><span class="s1">'798et134'</span><span class="p">:</span> <span class="mi">0</span><span class="p">},</span> <span class="p">{</span><span class="s1">'w4850t93'</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="p">{</span><span class="s1">'w9e18r52'</span><span class="p">:</span> <span class="mi">2</span><span class="p">},</span> <span class="p">{</span><span class="s1">'3692ry87'</span><span class="p">:</span> <span class="mi">3</span><span class="p">},</span> <span class="p">{</span><span class="s1">'r345268t'</span><span class="p">:</span> <span class="mi">4</span><span class="p">},</span> <span class="p">{</span><span class="s1">'02471q86'</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span> <span class="p">{</span><span class="s1">'37ry8524'</span><span class="p">:</span> <span class="mi">6</span><span class="p">},</span> <span class="p">{</span><span class="s1">'50qr7849'</span><span class="p">:</span> <span class="mi">7</span><span class="p">},</span> <span class="p">{</span><span class="s1">'260t497e'</span><span class="p">:</span> <span class="mi">8</span><span class="p">},</span> <span class="p">{</span><span class="s1">'e298q6ry'</span><span class="p">:</span> <span class="mi">9</span><span class="p">}]</span>
<span class="o">>>></span>
<span class="o">>>></span> <span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sample</span><span class="p">(</span><span class="n">l</span><span class="p">,</span><span class="mi">6</span><span class="p">)):</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)}</span>
<span class="o">>>></span> <span class="n">d</span>
<span class="p">{</span><span class="s1">'1rqe47'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'w6q5ty'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'15480r'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'02y9qw'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'80rw16'</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'7398y4'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">'7wyr1t'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span> <span class="s1">'094y1r'</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span> <span class="s1">'51ey76'</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span> <span class="s1">'02tqr3'</span><span class="p">:</span> <span class="mi">9</span><span class="p">}</span>
</pre></div>
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-17T19:16:54+03:00Elaphe192253Слишком длинная ссылка получится.<br/>Тогда проще свою таблицу перевода запилить. Просто странно, что нет готового решения, задача-то простая.
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-17T18:39:50+03:00vic57192252все что передается по сети - байты и говорить об int - смысла нет<br/>функций таких миллион можно написать, например словарь использовать<br/><div class="code"><pre> <span class="o">>>></span> <span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="o">>>></span> <span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="o">>>></span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">md5</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">i</span>
<span class="o">>>></span> <span class="n">d</span>
<span class="p">{</span><span class="s1">'c4ca4238a0b923820dcc509a6f75849b'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'c81e728d9d4c2f636f067f89cc14862c'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'eccbc87e4b5ce2fe28308fd9f2a7baf3'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'a87ff679a2f3e71d9181a67b7542122c'</span><span class="p">:</span> <span class="mi">4</span><span class="p">}</span>
<span class="o">>>></span>
</pre></div>
Общий :: Python для новичков :: Закодировать число в виде строки
2018-05-17T17:18:30+03:00Elaphe192251В веб-приложении используются ссылки, содержащие id юзера, хотелось бы сделать эти ссылки не просто по айдишнику, а скрыть его за какой-то строкой. Дело не в безопасности, просто из эстетических соображений - чтобы пользователь айдишник не видел ну и вообще солиднее выглядела ссылка.<br/>То есть нужны две функции, способные айдишник в виде int перевести в строку и обратно:<br/>encode: 32 => 3dhRf2nmj<br/>decode: 3dhRf2nmj => 32<br/>hash и hashlib не подходят, т.к. нет декодирования.<br/>django.core.signing.Signer возвращает строку, содержащую перед двоеточием айдишник, тоже не то.<br/>Самые простые решения, найденные гуглением, выглядят примерно <a href="https://stackoverflow.com/questions/2490334/simple-way-to-encode-a-string-according-to-a-password/21754610">так.</a> Может, есть что покороче?<br/>Или проще сделать столбец uuid и его вставлять в url?