我是加密的新手,我正在尝试解释下面的代码。也就是说,<xor>
是什么意思?
我有一个secret_key密钥。我也有一个unique_id。我使用下面的代码创建了pad。
pad = hmac.new(secret_key, msg=unique_id, digestmod=hashlib.sha1).digest()
创建垫后,我有一个价格,例如我试图遵循这个伪代码指令:
enc_price = pad <xor> price
在Python中,实现enc_price = pad <xor> price
的代码是什么?这样做背后的逻辑是什么?
作为一个说明,这里有我想要做的完整描述: https://developers.google.com/ad-exchange/rtb/response-guide/decrypt-price
developers.google.com/ad-exchange/rtb/response-guide/decrypt-price
由于
答案 0 :(得分:3)
二进制文件(我假设你需要的)xor
在python中是^
:
>>> 6 ^ 12
10
Binary xor的工作原理如下(以二进制表示的数字):
1234
6 = 0110
12 = 1100
10 = 1010
对于每对位,如果它们的和为1
(在我的示例中为位1和3),则结果位为1
。否则,它是0
。
答案 1 :(得分:0)
你的意思是“Binary bitwise operations”?
&amp;运算符产生其参数的按位AND,它必须是普通或长整数。参数将转换为通用类型。
^运算符产生其参数的按位XOR(异或),它必须是普通或长整数。参数将转换为通用类型。
|运算符产生其参数的按位(包含)OR,它必须是普通或长整数。参数将转换为通用类型。
[更新]
由于你不能x或字符串和数字,你应该:
像这样(未经测试):
pad = hmac.new(secret_key, msg=unique_id, digestmod=hashlib.sha1).digest()
rawpad = reduce(lambda x, y: (x << 8) + y,
[ b for b in struct.unpack('B' * len(pad), pad)])
enc_price = "%X" % (rawpad ^ price)
[更新]
OP希望实施“DoubleClick Ad Exchange Real-Time Bidding Protocol”。
这篇文章告诉我们有一些示例python代码:
初步测试
您可以使用requester.tar.gz在内部测试您的出价申请。这是一个测试python程序,它将请求发送到出价应用程序并检查响应。该计划可应要求提供给您的Ad Exchange代表。
答案 2 :(得分:0)
垫和明文“价格”各自被解释为比特流。对于两个流中的每个相应位,您采用该对位的“异或” - 如果位相同,则发出0,如果位不同,则发出1.此操作很有意思,因为它是可逆的:明文XOR垫 - &gt;密文和密文XOR pad - &gt;纯文本。
但是,在Python中,你通常不会自己进行XORing,因为对于新手来说这很乏味且过于复杂;您希望使用流行的加密库(例如PyCrypto)来完成工作。
答案 3 :(得分:0)
我这样做了
def strxor(s1,s2):
size = min(len(s1),len(s2))
res = ''
for i in range(size):
res = res + '%c' % (ord(s1[i]) ^ ord(s2[i]))
return res