Shiro 命令行哈希器

Posted by jiangydev on December 24, 2017

[TOC]

Command Line Hasher

Shiro 1.2 及之后的版本提供一个命令行工程,能够哈希字符串和资源(文件、URLs、classpath 入口)几乎任意类型。为了使用它,你必须安装了 Java 虚拟机,并且 java 命令能在你的 $PATH 环境变量中访问。

Usage

确保你能访问 shiro-tools-hasher-_version_-cli.jar 文件。你可以在buildroot /tools/hasher/target 目录中生成的源代码中找到它,或通过 Maven 下载。

一旦你能访问到 jar, 你可以运行下面的命令行:

$ java -jar shiro-tools-hasher-X.X.X-cli.jar

这会为标准的(MD5, SHA1)和更多复杂密码哈希的场景打印出所有可获得的选项。

Common Scenarios

请阅读上面命令行打印出的指令。它会提供一个详尽的指令列表,按你的需求帮助你使用 Hasher。但是,为方便起见,下面我们也提供一些快速使用/场景参考。

shiro.ini User Passwords

最好使用户密码在 shiro.ini 的 [users] 部分安全。为了增加一个新的用户帐户行,使用上面的命令行带 -p(或 --password) 选项:

1
$ java -jar shiro-tools-hasher-X.X.X-cli.jar -p

它将会让你输入密码并确认:

1
2
Password to hash:
Password to hash (confirm):

当这个命令行执行,它会打印出 securely-salted-iterated-and-hashed 密码,例如:

1
$shiro1$SHA-256$500000$eWpVX2tGX7WCP2J+jMCNqw==$it/NRclMOHrfOvhAEFZ0mxIZRdbcfqIBdwdwdDXW2dM=

拿着这个值并在用户定义的行(跟着任何可选的角色)作为密码替换:

1
2
3
[users]
...
user1 = $shiro1$SHA-256$500000$eWpVX2tGX7WCP2J+jMCNqw==$it/NRclMOHrfOvhAEFZ0mxIZRdbcfqIBdwdwdDXW2dM=

你还需要确保隐含的 iniRealm 使用 CredentialsMatcher,知道如何执行安全哈希密码比较。所以在 [main] 部分配置它:

1
2
3
4
5
[main]
...
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher
iniRealm.credentialsMatcher = $passwordMatcher
...

MD5 checksum

尽管你可以用 JVM 上支持的任何算法执行任何哈希,默认的哈希算法是 MD5,对文件校验很常见。只要使用 -r(或 --resource) 选项指明接下来的值是资源位置:

1
$ java -jar shiro-tools-hasher-X.X.X-cli.jar -r RESOURCE_PATH

默认的 RESOURCE_PATH 期望是一个文件路径,但你可能通过 classpath:url: 前缀指定 classpath 或 URL 资源. 例子如下:

1
2
3
4
5
6
<command> -r fileInCurrentDirectory.txt
<command> -r ../../relativePathFile.xml
<command> -r ~/documents/myfile.pdf
<command> -r /usr/local/logs/absolutePathFile.log
<command> -r url:http://foo.com/page.html
<command> -r classpath:/WEB-INF/lib/something.jar