如何使用字符串的二进制文件添加int的二进制文件

时间:2010-09-21 15:32:25

标签: python websocket

基本上我希望能够获得32位int并将其二进制文件附加到字符串的二进制文件中。 例如。 (IM将使用8位而不是32位) 我想要 255 +嗨 11111111 + 0110100001101001 = 111111110110100001101001 因此int保存其二进制值,我不关心它是如何出来的我只是希望它能够通过套接字发送数据。

(这是遍布websockets和新的sec-websocket-key来阻止黑客攻击,如果有人只知道如何进行websocket握手,那将是非常好的)

谢谢你!我已经尝试了好几天了,我不是一个人来这个类型的网站得到答案

修改

我一直被要求提供更多信息,所以她就是全部。我已经连接到流端口的用户,他已经发送了我现在需要回复的标题以完成连接。导入数据是

Sec-WebSocket-Key1:4 @ 1 46546xW%0l 1 5“随机字符串遵循规则”(我将其称为sk1)

Sec-WebSocket-Key2:12998 5 Y3 1 .P00“随机字符串遵循规则”(我将其称为sk2)

^ n:ds [4U“随机字符串遵循规则”(我将称之为sk3)

1)int1 =将数字压缩为sk1并按sk1中的空格数量划分

2)int2 =将数字压缩为sk2并按sk2中的空格数划分它们

3)fullapend = Add将int2的字节附加到int1然后在sk3中附加字节

4)最后MD5消化fullapend

5)将最终结果与其他一些标题一起发送给主机,如果它们匹配,则连接保持打开状态

这就是需要发生的一切,我还不知道如何做到这一点

完成了!

基本两个答案都是对的,我想道歉,如果我看起来有点粗鲁,我不知道\ x是一个(某事)意义二进制。但那是一种享受。一旦我有完成功能连接发送等...我将发布在这里,否则其他任何人卡住了,再次谢谢你!

2 个答案:

答案 0 :(得分:3)

这样的东西
struct.pack("!i%ds" % len(your_string), your_int, your_string)

应该做你想要的任何事情!

答案 1 :(得分:2)

这是你要找的吗?不知道你是在使用hexdigest还是摘要,我无法分辨出键的开始和停止位置,这是一种耻辱,因为它们是空白敏感的。

同样在您的更新中,当我认为您的意思是“连接”时,您说“压缩”数字。我认为生成的密钥应该是bigendian,这就是我所做的。

>>> import struct
>>> def processKey(data):
...     num = int("".join([x for x in data if x.isdigit()]))
...     spaces = data.count(' ')
...     return num / spaces
...
>>> key1 = '4 @1 46546xW%0l 1 5'
>>> key2 = '12998 5 Y3 1 .P00 '
>>> sk1 = processKey(key1)
>>> sk2 = processKey(key2)
>>> sk1
1036636503L
>>> sk2
259970620
>>> sk3 = "^n:ds[4U"
>>> fullappend = struct.pack('>ii%ds' % len(sk3),sk1,sk2,sk3)
>>> fullappend
'=\xc9\xd1W\x0f~\xd6<^n:ds[4U'
>>> len(fullappend)
16
>>> from hashlib import md5
>>> md5(fullappend).hexdigest()
'fd028b6b39ceb8e37f09b8e45556bbc4'
>>> md5(fullappend).digest()
'\xfd\x02\x8bk9\xce\xb8\xe3\x7f\t\xb8\xe4UV\xbb\xc4'