【问题标题】:Perl/Java Byte Encoding DifferencesPerl/Java 字节编码差异
【发布时间】:2012-08-11 23:51:50
【问题描述】:

所以现在,我的 Java 代码正在创建与我们的 Perl 代码不同的 SHA-256 哈希,但仅在 UTF8 字符起作用时。我做了一些调试,发现名称 Jörg 的 byte[] 表示在语言中如下所示:

Java 74、-61、-74、114、103

Perl 74、195、182、114、103

可能导致哈希值不同吗?看起来 Java 使用有符号字节,而 Perl 使用无符号字节。如果需要/要求提供更多信息!

谢谢!

【问题讨论】:

  • “看起来 Java 使用有符号字节,而 Perl 使用无符号字节。” - 你在那里回答了你自己的问题。使用theByte & 0xFF 获取未签名版本作为 int。
  • 但是,当我使用 MessageDigest (SHA-256) 对字符串进行哈希处理时,它会导致差异吗?
  • 只是好奇,当您说“我的 Java 代码正在创建”时,您的意思是您编写了自己的哈希实现吗?
  • 转换为unsigned byte[]
  • 我们发现了问题。最终与签名/未签名问题无关。

标签: java perl encoding utf-8 character-encoding


【解决方案1】:

所以问题出在Java中,当我反转字符串时,它正在反转字符(如预期的那样)。在 Perl 中, reverse 实际上作用于字节。这意味着 Jörg 在反转时在语言中看起来像这样:

Java 103 114 -61 -74 74

Perl 103 114 195 182 74

希望这对其他人有所帮助!

【讨论】:

  • 当数据进入程序时,听起来您没有将字节字符串解码为字符。有关详细信息,请参阅“perldoc perlunicode”(perldoc.perl.org/perlunicode.html)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多