【问题标题】:Weird result when convert Hex to String将十六进制转换为字符串时的奇怪结果
【发布时间】:2016-01-17 09:30:35
【问题描述】:

如何将十六进制值转换为字符串?我使用以下方法得到了这个奇怪的结果。

例如:

String result = DB_record.convertHexToString(PASSWORD); 
// c53255317bb11707d0f614696b3ce6f221d0e2f2 hex value;
System.err.println("result==="+result);

Java

 public String convertHexToString(String hex){

  StringBuilder sb = new StringBuilder();
  StringBuilder temp = new StringBuilder();
  for( int i=0; i<hex.length()-1; i+=2 ){

      //grab the hex in pairs
      String output = hex.substring(i, (i + 2));
      //convert hex to decimal
      int decimal = Integer.parseInt(output, 16);
      //convert the decimal to character
      sb.append((char)decimal);

      temp.append(decimal);
  }

  return sb.toString();
 }

输出

【问题讨论】:

  • 您给出的示例(在@Michal 的帖子 cmets 中)表明您实际上是在保存到数据库之前对文本进行加密。您将需要对其进行解密以获取原始文本。十六进制字符串如何帮助?而且,如果是这样的话,这个问题就太不清楚了,无法回答。

标签: java string hex decode


【解决方案1】:

问题出在这里 sb.append((char)decimal);

这不是正确的方法,如何将 int 转换为 String。

试试这个

sb.append(Integer.toString(decimal));

【讨论】:

  • 嗨@Michal,感谢您的回复。但结果不是我加密时的结果。 c53255317bb11707d0f614696b3ce6f221d0e2f2原文是qwe123,使用你提供的解决方案后得到的结果是197508549123177237208246201051076023024233208226242
  • 当然。您正在做的是从 HEX do DEC 解码 - 一个数字到另一个数字。我认为,您要做的是获取原始文本。假设“c53255317bb11707d0f614696b3ce6f221d0e2f2”是哈希,那么你想要做的在数学上是不可能的。在此处阅读更多信息en.wikipedia.org/wiki/Cryptographic_hash_function。您可能还对散列和加密之间的差异感兴趣,我将由您决定:)
【解决方案2】:
 byte[] bytes = DatatypeConverter.parseHexBinary(hexString);
      String result= new String(bytes, encoding);

【讨论】:

  • 虽然这在理论上可以回答这个问题,但这并不是一个很好的答案,因为它不教 OP。相反,它给出了一个替代解决方案,没有解释。这通常会导致 OP 不学习,并在出现类似问题时回来提出新问题。您介意添加一些解释吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2018-01-22
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
相关资源
最近更新 更多