gpt4 book ai didi

java - 如何将从 sha1 字节数组生成的字符串返回到该字节数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:12 25 4
gpt4 key购买 nike

首先,我很抱歉英语不好。

嗯,我想从 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,在我的示例中,我得到... ¡33! ¡wuuut! 我想从生成的字符串中再次获取我的 20 个数组。我怎样才能得到这个?

好的,谢谢:P

最佳答案

I'm storing binary data as strings, because the BEncode format in .torrent files, store that binary data as string

Bencode“字符串”是字节序列,而不是 unicode 代码点序列。因此,一种语言的字节表示形式 - java 中的 byte[]ByteBuffer - 是合适的,并且仅在某些情况下,当它们实际上包含应该是人类可读的内容时,才应将其解释为 utf8 字符串。

因此您应该使用支持提取原始字节的 bencoding 库。

关于java - 如何将从 sha1 字节数组生成的字符串返回到该字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com