首先很抱歉英语不好。
好吧,我想从 torrent 文件中读取片段哈希信息。目前,我正在使用https://github.com/hyPiRion/java-bencode这个 Bencode 库来解码信息,但我的问题是当我想将片段字符串转换为字节数组时。
torrent 文件以 UTF-8 编码。但如果我这样做
Byte[] bytepieces = piecestring.getBytes("UTF-8");
它给得很好。任何真正有用的东西。
另一方面,为了比较或尝试获取字符串,我没有获取字节,而是读取了文件的第一部分,并计算了 sha1。获得 sha1 的 20 大小的字节数组后,如果我将其转换为字符串,实际上,该字符串与大字符串的第一部分匹配...但是,如果我尝试将生成的字符串返回到最初的 20 个字节创建它的...我不能...该怎么做?
小例子:
FileInputStream fin = new FileInputStream("miFile");
byte[] array = new Byte[512*1024]; //a piece of 512 kb
fin.read(array,0,512*1024);
MessageDigest md = MessageDigest.getInstanse ("SHA);
Byte [ sha1byte = md.digest(array);
String s = new String(sha1byte,"UTF-8");
执行此操作后,sha1byte.length 为 20,这是 sha1 哈希的正确大小。但如果我这样做s.getBytes("UTF-8").length, in the case of my example i got... ¡33! ¡wuuut!
我想从生成的字符串中再次获取 20 个数组。我怎样才能得到这个?
好的,谢谢:P
我将二进制数据存储为字符串,因为 .torrent 文件中的 BEncode 格式将该二进制数据存储为字符串
Bencode“字符串”是字节序列,而不是 unicode 代码点序列。因此,语言的字节表示 -byte[]
or ByteBuffer
在 java 中 - 是合适的,并且仅在某些情况下当它们实际上包含应该是人类可读的内容时才应解释为 utf8 字符串。
因此,您应该使用支持提取原始字节的 bencoding 库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)