4

次のような文字列があります。

String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ]

String A を暗号化して、クリーンな URL で使用したいと考えています。このようなもの:

String B: [ cYdfkeYss4543423sdfHsaaZ ]

文字列Aを指定すると、PythonにエンコードAPIがあり、文字列Bを返しますか? 文字列Bを指定すると、PythonにデコードAPIがあり、文字列Aを返しますか?

4

8 に答える 8

13

エンコーディングと暗号化には大きな違いがあることに注意してください。

機密データを送信したい場合は、上記のエンコーディングを使用しないでください;)

于 2009-07-26T10:27:29.437 に答える
9

エンコード/デコードを行う 1 つの方法は、パッケージ base64 を使用することです。たとえば、次のようになります。

import base64
import sys

encoded = base64.b64encode(sys.stdin.read())
print encoded

decoded = base64.b64decode(encoded)
print decoded

それはあなたが探していたものですか?特定のケースでは、次のようになります。

入力: 12234_1_Hello'World_34433_22acb_4554344_accCC44

エンコード: MTIyMzRfMV9IZWxsbydXb3JsZF8zNDQzM18yMmFjYl80NTU0MzQ0X2FjY0NDNDQ=

デコード: 12234_1_Hello'World_34433_22acb_4554344_accCC44

于 2009-05-17T23:51:22.347 に答える
5

文字列を暗号化またはエンコードして、URL の不正な文字を削除しようとしていますか? 後者の場合は、次を使用できますurllib.quote

>>> quoted = urllib.quote("12234_1_Hello'World_34433_22acb_4554344_accCC44")
>>> quoted
'12234_1_Hello%27World_34433_22acb_4554344_accCC44'

>>> urllib.unquote(quoted)
"12234_1_Hello'World_34433_22acb_4554344_accCC44"
于 2009-05-17T23:54:47.640 に答える
5

暗号化、圧縮、または単に urlencoding を使用していますか? 文字列は urlencoding の後に渡すことができますが、例のように小さくすることはできません。圧縮すると縮小される可能性がありますが、それでも結果を urlencode する必要があります。

実際に文字列データをビューアーから隠す必要がありますか (たとえば、機密データは、誰かがあなたの肩越しに URL を読んで見ることができないようにする必要があります)。

于 2009-05-17T23:56:46.250 に答える
2

base64 モジュールは、Python 2.4 以降、異なるベースとの間で文字列のエンコードとデコードを提供します。

あなたの例では、次のようにします。

import base64
string_b = base64.b64encode(string_a)
string_a = base64.b64decode(string_b)

完全な API: http://docs.python.org/library/base64.html

于 2009-05-17T23:54:06.503 に答える
1

文字列を短縮する別の方法は、文字列の md5/sha1 ハッシュを計算することです (必要に応じてシードと連結します)。

import hashlib
>>> hashlib.sha1("12234_1_Hello'World_34433_22acb_4554344_accCC44").hexdigest()
'e1153227558aadc00a2e90b5013fdd6b0804fdfb'

理論的には、衝突がほとんどなく、長さが固定された一連の文字列を取得する必要があります。hashlibライブラリには、さまざまな出力サイズで、この方法で使用できるさまざまなハッシュ関数の配列があります。

編集:可逆的な文字列が必要だとも言ったので、これはうまくいきません。ただし、Afaik のようにクリーンな URL を使用する多くの Web プラットフォームは、ハッシュ関数を使用して短縮 URL を計算し、その URL をページの他のデータと一緒に保存して逆引き検索機能を提供したいと考えているようです。

于 2009-05-18T03:36:04.857 に答える