un3*_*33k 4 python string hash urlencode clean-urls
我有一个像这样的字符串:
String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ]
Run Code Online (Sandbox Code Playgroud)
我想加密字符串A以在干净的URL中使用.这样的事情:
String B: [ cYdfkeYss4543423sdfHsaaZ ]
Run Code Online (Sandbox Code Playgroud)
python中是否有编码API,给定字符串A,它返回String B?在python中是否有解码API,给定String B,它返回String A?
进行编码/解码的一种方法是使用包base64,例如:
import base64
import sys
encoded = base64.b64encode(sys.stdin.read())
print encoded
decoded = base64.b64decode(encoded)
print decoded
Run Code Online (Sandbox Code Playgroud)
这是你在找什么?根据您的具体情况,您将得到:
输入:12234_1_Hello'World_34433_22acb_4554344_accCC44
编码:MTIyMzRfMV9IZWxsbydXb3JsZF8zNDQzM18yMmFjYl80NTU0MzQ0X2FjY0NDNDQ =
已解码:12234_1_Hello'World_34433_22acb_4554344_accCC44
您是否希望对字符串进行加密或编码以删除网址中的非法字符?如果是后者,您可以使用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"
Run Code Online (Sandbox Code Playgroud)
您是在加密,压缩还是只是urlencoding之后?字符串可以在urlencoding之后传递,但这不会像在示例中那样变小.压缩可能会缩小它,但您仍需要对结果进行urlencode.
您是否真的需要隐藏查看器中的字符串数据(例如,敏感数据,不应该被读取URL的人看到)?
要使它真的很短 - >只需在数据库中插入一行.存储类似(id auto_increment, url)元组列表的内容.然后你可以base64编码id来获得一个"代理网址".通过解码id并在数据库中查找正确的url来解码它.或者,如果您不介意标识符看起来是顺序的,只需使用数字即可.