愤怒的代码已经把他们的恶意目光转向了我,现在轮到我来实现The Direct Project所定义的“安全传输”了。无论我们是否在内部使用DNS而不是LDAP来共享证书,我显然都需要设置前者来进行测试,这就是让我陷入困境的原因。显然,X509证书需要一些消息才能在cert记录中使用,我正在尝试弄清楚如何做到这一点。
我找到的最清晰的东西是Videntity's blog上的一个脚本,但由于不精通python,我遇到了一个绊脚石。具体地说,这一行会崩溃:
decoded_clean_pk = clean_pk.decode('base64', strict)因为它似乎不喜欢(或者更确切地说,不知道)任何“严格”应该代表的东西。我做了一个半受过教育的猜测,认为这条线路应该解码base64数据,但几年前我从Debian OpenSSL的失败中学到了盲目地摆弄与密码相关的代码是一件坏事(TM)。
因此,我打开了著名的python书呆子,询问是否可以用下面这行替换(添加了适当的导入):
decoded_clean_pk = base64.b64decode(clean_pk)脚本在更改后运行,并产生看起来正确的输出,但我有足够的直觉知道,在这里我不一定相信自己的直觉。:)
发布于 2013-11-21 22:36:04
如果您像这样调用,这行应该是有效的:
decoded_clean_pk = clean_pk.decode('base64', 'strict')请注意,strict必须是一个string,否则python解释器将尝试搜索一个名为strict的变量,如果它没有找到该变量,或者它具有strict、ignore和replace以外的其他值,它可能会抱怨这个问题。
请看下面的代码:
>>>b=base64.b64encode('hello world')
>>>b.decode('base64')
'hello world'
>>>base64.b64decode(b)
'hello world'当向.decode传递base64参数字符串时,decode和b64decode的工作方式相同。
不同之处在于,str.decode将接受一个字节字符串作为参数,并根据作为第一个参数传递的encoding参数返回其Unicode表示形式。在本例中,您告诉它处理一个bas64字符串,这样它就可以正常工作了。
为了回答您的问题,这两种方法的工作原理是相同的,尽管b64decode/encode只能处理base64编码,并且str.decode可以处理库所知道的任意多的编码。
有关更多信息,请阅读两个文档部分:decode和b64decode。
更新:实际上是,我想这是最重要的例子:)看看decode()使用的encodings/base64_codec.py的源代码:
def base64_decode(input,errors='strict'):
""" Decodes the object input and returns a tuple (output
object, length consumed).
input must be an object which provides the bf_getreadbuf
buffer slot. Python strings, buffer objects and memory
mapped files are examples of objects providing this slot.
errors defines the error handling to apply. It defaults to
'strict' handling which is the only currently supported
error handling for this codec.
"""
assert errors == 'strict'
output = base64.decodestring(input)
return (output, len(input))正如您可能看到的,它实际上使用base64模块来完成此操作:)
希望这能在某种程度上澄清你的问题。
https://stackoverflow.com/questions/20123544
复制相似问题