4

我有一个这样的字符串:

String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ]

我想加密字符串 A 以在干净的 URL 中使用。像这样的东西:

String B: [ cYdfkeYss4543423sdfHsaaZ ]

python中是否有编码API,给定字符串A,它返回字符串B?python中是否有解码API,给定字符串B,它返回字符串A?

4

8 回答 8

13

请注意,编码和加密之间存在巨大差异。

如果你想发送敏感数据,那么不要使用上面提到的编码;)

于 2009-07-26T10:27:29.437 回答
9

进行编码/解码的一种方法是使用包 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 回答
5

为了使它非常简短-> 只需在数据库中插入一行。存储类似(id auto_increment, url)元组列表的东西。然后您可以base64对 id 进行编码以获得“代理 url”。通过解码 id 并在数据库中查找正确的 url 来解码它。或者,如果您不介意标识符看起来是连续的,只需使用数字即可。

于 2009-05-18T00:41:19.730 回答
2

从 python 2.4 开始,base64 模块提供了对来自不同基数的字符串的编码和解码。

在您的示例中,您将执行以下操作:

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 回答
2

很难减小字符串的大小并保留任意内容。

您必须将数据限制为可以有效压缩的数据。

您的替代方法是执行以下操作。

  1. 将“URL 中的所有参数”保存在数据库行中。

  2. 为这个参数集合分配一个 GUID 键。

  3. 然后提供该缩短的 GUID 密钥。

于 2009-05-18T00:43:06.090 回答
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 回答