java - Linux 中哈希命令的区别

标签 java linux hash

我正在尝试获取登录数据库的以 Base64 编码的密码哈希值。我正在使用 picketbox 安全库来获取密码的 Base64 编码哈希值,但我想获得不同的工具。

  1. 如果我使用:

    java -cp $JBOSS_HOME/modules/system/layers/base/org/picketbox/main/picketbox-4.9.6.Final.jar org.jboss.security.Base64Encoder  master SHA-256
    

    我得到:

    [/GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=];
    

    [ ] 必须从数据库中删除才能正常登录。

  2. 当我使用时:

     echo -n master | openssl dgst -sha256 -binary | base64
    

    我得到:

    /GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=
    

结果相同。

  • 但是当我使用时:

    echo -n master |sha256sum -b | base64
    

    我得到:

    ZmM2MTNiNGRmZDY3MzZhN2JkMjY4YzhhMGU3NGVkMGQxYzA0YTk1OWY1OWRkNzRlZjI4NzQ5ODNmZDQ0M2ZjOSAqLQo=
    
  • openssl dgst -sha256 -binary 和 sha256sum -b 之间有什么区别?我以为他们会提供相同的哈希值。

    最佳答案

    看看opensslsha256sum之间的区别:

    • openssl 打印原始二进制文件中的哈希值。它不是文本,它不是人类可读的,它是纯字节:

      $ echo -n master | openssl dgst -sha256 -binary
      �Y��N�I��D?�
      

      如果您使用 wc ---bytes 计算字节数,您会发现它正好打印了 32 个字节:

      $ echo -n master | openssl dgst -sha256 -binary | wc --bytes
      32
      

      我们还可以使用 hexdump 将其转换为十六进制:

      $ echo -n master | openssl dgst -sha256 -binary | hexdump
      0000000 61fc 4d3b 67fd a736 26bd 8a8c 740e 0ded
      0000010 041c 59a9 9df5 4ed7 87f2 8349 44fd c93f
      0000020
      
    • 相比之下,sha256sum 使用数字 0-9 和字母 a-f 以人类可读的十六进制形式打印哈希值.

      $ echo -n master | sha256sum -b
      fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9 *-
      

      它与上面的乱码二进制信息相同,但呈现方式不同。您会注意到十六进制值比二进制数据占用更多空间。它还在末尾包含文件名,这里是神秘的 *-* 表示您使用了 -b 标志,而 - 表示输入是从 stdin 读取的。

    如果将 -binary 更改为 -hex,则可以从 openssl 获得相同的十六进制值:

    $ echo -n master | openssl dgst -sha256 -hex
    (stdin)= fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9
    

    但是,没有办法做相反的事情。 sha256sum 没有用于打印二进制哈希值的标志。它只能做十六进制。

    关于java - Linux 中哈希命令的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61667824/

    相关文章:

    java - 检查曲线是否闭合

    JavaFX 视频在反复播放同一视频几个小时后出现卡顿

    arrays - 字符串数组作为哈希函数键?

    linux - 有没有办法在 ELF 二进制文件开始执行时自动设置环境变量?

    linux - sh 中的在线字符串比较

    哈希表困惑 - 具有良好(例如密码)哈希函数的哈希表需要多少空间?

    java - 将字符串的 MD5 哈希值的最高 8 个字节视为 long(在 Ruby 中)

    java - 如何在 JSP 中格式化值?

    java - 任务 :app:transformClassesWithJarMergingForDebug 执行失败

    linux - 安装 rpm pkg 时出现文件错误,解压存档失败