在Java中是否有一種簡單的方法來生成與「openssl passwd -1」生成的密碼哈希值相同的格式。在java中生成類似openssl passwd的密碼哈希值-1
例子:
# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在尋找一個純Java的解決方案,不調用OpenSSL的或任何其他外部程序。
感謝 拉斐爾
在Java中是否有一種簡單的方法來生成與「openssl passwd -1」生成的密碼哈希值相同的格式。在java中生成類似openssl passwd的密碼哈希值-1
例子:
# openssl passwd -1 test
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo.
我正在尋找一個純Java的解決方案,不調用OpenSSL的或任何其他外部程序。
感謝 拉斐爾
也許這樣的事情?
MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(pPassword.getBytes("UTF-8"));
byte raw[] = md.digest();
String hash = BASE64Encoder.encodeBuffer(raw);
Java BASE64Encoder源碼可以在網上找到。
The openssl docs將-1
選項描述爲:「使用基於MD5的BSD密碼算法1」。
Jasypt是一個java cryptogrqphy庫,如jBCrypt。 Jasypt稍微複雜一點,但更易於配置。
我不知道很多有關加密,但我的猜測是,通過OpenSSL的生成的密碼分解爲:
$1$
- 指定該用的是MD5方案
Gt24/BL6
產生 - 8字節鹽
$
- 符
E4ZsrluohHFxtcdqCH7jo.
- 哈希
所以它看起來像Jasypt的BasicPasswordEncryptor可能是你want-什麼
我對此表示懷疑,除非BasicPasswordEncryptor被有意設計爲與Flask FreeBSD MD5Crypt兼容。 – 2010-01-18 13:01:20
好吧,它使用了MD5,8字節的salt和1000次迭代(這似乎是crypt算法使用的 - http://www.mail-archive.com/[email protected]/msg23405.html),我猜想這會留下實現本身。 。 。 – 2010-01-18 13:06:14
您可以找到C語言版本here的源代碼。將其轉換爲純Java應該很簡單。
或者您可以使用Commons Coded的base64encoder:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html – 2010-01-18 12:01:01
'$'不是有效的Base64代碼。我認爲還有比Base64編碼更多的東西。 – 2010-01-18 12:13:37