如何从带有XMPP的vcard照片SHA-1 Hash中检索图像?

时间:2013-05-01 07:25:53

标签: xmpp

我的情况是我正在获取图像的SHA1 HASH。现在我该如何将其转换为Image

有关您的信息,这是XMPP代码,我将获得如下的用户信息和SHA1 HASH格式的照片。

<presence from='juliet@capulet.com/balcony'>
    <x xmlns='vcard-temp:x:update'>
        <photo>sha1-hash-of-image</photo> 
    </x>
</presence>

我是C#的初学者,感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

你做不到。 SHA-1 hash实际上只是图像的指纹 - 它不包含图像本身。

鉴于this extension document看起来这个想法是vCard包含实际数据 - 而vCard更新只包含散列,因此已经获取(和缓存)的客户端此图像之前可以检查其缓存版本是否仍然有效,如果没有,则获取完整数据。

来自section 3.2

  

当收件人的客户端收到头像图像的哈希值时,它应该检查哈希值以确定它是否已经拥有该头像图像的缓存副本。如果没有,它会根据XEP-0054中描述的协议流检索发送方的完整vCard(请注意,此请求将发送给用户的裸JID,而不是完整的JID)

答案 1 :(得分:0)

如果你想获得一个用户的VCard,你应该使用他们的jid(或者扩展的jid ...加载该用户的VCard ...我不知道C#xmpp库需要加载一个VCard)。

但是,一旦加载了VCard,您应该能够在XML中获取照片的原始值。 photo的值将是base64编码的字符串,因此你应该将字符串base64解码为二进制字节字符串或字节数组,再次不知道C#XMPP lib提供什么,就提取头像数据而言。

执行此操作后,您可以将其转换为图像。在java中,这样做:

VCard vcard = new VCard(xmppConnection);
try {
    vcard.load("someone@xmpp-server-somewhere.com");
} catch (XMPPException e) {}
byte[] avatar = vcard.getAvatar();

BTW:SHA1哈希只是比较以查看图像是否从上次更改:)

希望有所帮助~~