MSN协议中的msnobj浅析

在MSN Messenger通讯中,都会看到关于msnobj的信息
如:
>> CHG 140 NLN 805306468 %3Cmsnobj%20Creator%3D%22xxxx%40hotmail.com%22%20Size%3D%2233630%22%20Type%3D%223%22%20Location%3D%22TFR7.dat%22%20Friendly%3D%22AAA%3D%22%20SHA1D%3D%22fUp1qsbEAHWV3IFgjMglKlT%2FC5k%3D%22%20SHA1C%3D%22b%2BF7JnnL2K5ysdNzW727SjSJKoQ%3D%22%2F%3E

后面那串urlencode过的部分,其实就是msnobj。
我们用urldecode以后,就可以看到真实的内容。
<msnobj Creator="xxxxx@citiz.net" Size="24588" Type="3" Location="TFR73.dat" Friendly="AAA=" SHA1D="Tf/ZG8+rFqIK3YMrvo2dzq0afgs=" SHA1C="pIz9DyWNXhtdDw5pd/QTkcBw99I="/>

msnobj中有些元素,大家一看就明白是怎么回事了。
size是指文件大小,location就是文件名,friendly是固定的,我也在研究中。
type是一个类型说明,3就是头像,其他可能代表了emotion等等,sha1d,sha1c接下来会说明。
对方的MSN Messenger获得了你的<msnobj>后,就知道,你的msn的头像信息,就会发起一个p2p的请求。

sha1d是对于你这个文件的数字摘要,把TFR73.dat这个文件所有的字节读入,然后进行sha-1算法的运算,获得一个20字节流,再用base64进行加码获得的。
sha1c是对于msnobj各项元素串进行数字摘要的结果。

根据这个原理,我们就可以很容易编程实现sha1d,sha1c。
try{
//get an object of SHA-1
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");

//read file byte stream
File f=new File("TFR73.png");
int len=(int)f.length();
FileInputStream fi=new FileInputStream(f);

byte[] buf=new byte[len];
fi.read(buf);
fi.close();

//create sha1d value
alga.update(buf);
byte[] digesta=alga.digest();
String sha1d=Base64.encodeBytes(digesta);

//create sha1c value
StringBuffer sb=new StringBuffer(50);
sb.append("Creator");
sb.append("enhydraboy_robot01@citiz.net");
sb.append("Size");
sb.append(len);
sb.append("Type");
sb.append(3);
sb.append("Location");
sb.append("TFR73.dat");
sb.append("Friendly");
sb.append("AAA=");
sb.append("SHA1D");
sb.append(sha1d);


alga.update(sb.toString().getBytes());
digesta=alga.digest();
String sha1c=Base64.encodeBytes(digesta);
System.out.println("SHA1D=/""+sha1d+"/"");
System.out.println("SHA1C=/""+sha1c+"/"");

}catch(Exception e){
e.printStackTrace();
}

结果如下:
SHA1D="Tf/ZG8+rFqIK3YMrvo2dzq0afgs="
SHA1C="pIz9DyWNXhtdDw5pd/QTkcBw99I="
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值