在JavaScript和Python中如何对Unicode字符串进行Base64编码?

4
我需要一种加密算法,将文本加密为另一个文本。
输入文本可能是Unicode编码,输出应该是a-z A-Z 0-9 - .(最多64个字符)。
并且可以解密回Unicode编码。
它应该在JavaScript和Python中实现。
如果已经有一些库可以做到这一点,那很好,如果没有,你能告诉我吗?
让我谈谈原因:
为了欺骗中国的防火长城,GAE https已被中国屏蔽。对此该死的政府感到愤怒。

请对该过程进行一些澄清。您能展示一下输入和期望输出的示例吗?为什么需要在JS和Python中实现?这听起来是一个相当奇特的要求。您到底需要这个东西做什么? - Pekka
这不是加密,这是编码。修正标签。 - Thilo
听起来你正在实现一些灾难性的不安全操作,正确的答案很可能是“停止”并使用HTTPS。 - Glenn Maynard
关于为什么:这确实是一个高尚的目标,任何时候都值得支持,但是防火墙真的这么简单吗?很难相信。 - Pekka
我不确定。根据一些经验,有URL过滤器和内容过滤器以及IP过滤器,例如,如果URL包含groups.google.com,无论它是否在域位置上,都会被阻止,如果内容包含某些敏感词语,也会被阻止,并且特定IP的https端口会被手动阻止。 - guilin 桂林
2个回答

10

您可能需要查看base64模块。 在Python 2.x(从2.4开始):

>>> import base64
>>> s=u"Rückwärts"
>>> s
u'R\xfcckw\xe4rts'
>>> b=base64.b64encode(s.encode("utf-8"))
>>> b
'UsO8Y2t3w6RydHM='
>>> d=base64.b64decode(b)
>>> d
'R\xc3\xbcckw\xc3\xa4rts'
>>> d.decode("utf-8")
u'R\xfcckw\xe4rts'
>>> print d.decode("utf-8")
Rückwärts

4

您正在寻找base64编码。在JavaScript和Python 2中,这有点复杂,因为后者不支持原生unicode,对于前者,您需要自己实现一个Unicode编码。

Python 3解决方案

>>> from base64 import b64encode, b64decode
>>> b64encode( 'Some random text with unicode symbols: äöü今日は'.encode() )
b'U29tZSByYW5kb20gdGV4dCB3aXRoIHVuaWNvZGUgc3ltYm9sczogw6TDtsO85LuK5pel44Gv'
>>> b64decode( b'U29tZSByYW5kb20gdGV4dCB3aXRoIHVuaWNvZGUgc3ltYm9sczogw6TDtsO85LuK5pel44Gv' )
b'Some random text with unicode symbols: \xc3\xa4\xc3\xb6\xc3\xbc\xe4\xbb\x8a\xe6\x97\xa5\xe3\x81\xaf'
>>> _.decode()
'Some random text with unicode symbols: äöü今日は'

Python 3在调用.encode()时是否默认使用UTF-8编码? - AndiDog
好的,明白了。默认编码从ASCII更改为UTF-8。我认为encode()有点违反“显式优于隐式”的规则。 - AndiDog
1
Python 3中的字符串是Unicode编码的,调用.encode()方法会创建一个bytes对象,该对象不包含有关编码的任何信息。在bytes对象上调用.decode()方法可以实现反向操作。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接