2010-01-18 87 views
4

在Java中是否有一種簡單的方法來生成與「openssl passwd -1」生成的密碼哈希值相同的格式。在java中生成類似openssl passwd的密碼哈希值-1

例子:

# openssl passwd -1 test 
$1$Gt24/BL6$E4ZsrluohHFxtcdqCH7jo. 

我正在尋找一個純Java的解決方案,不調用OpenSSL的或任何其他外部程序。

感謝 拉斐爾

回答

0

也許這樣的事情?

MessageDigest md = null; 
md = MessageDigest.getInstance("SHA"); 
md.update(pPassword.getBytes("UTF-8")); 
byte raw[] = md.digest(); 
String hash = BASE64Encoder.encodeBuffer(raw); 

Java BASE64Encoder源碼可以在網上找到。

+0

或者您可以使用Commons Coded的base64encoder:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html – 2010-01-18 12:01:01

+0

'$'不是有效的Base64代碼。我認爲還有比Base64編碼更多的東西。 – 2010-01-18 12:13:37

3

The openssl docs-1選項描述爲:「使用基於MD5的BSD密碼算法1」。

Jasypt是一個java cryptogrqphy庫,如jBCrypt。 Jasypt稍微複雜一點,但更易於配置。

我不知道很多有關加密,但我的猜測是,通過OpenSSL的生成的密碼分解爲:
$1$ - 指定該用的是MD5方案
Gt24/BL6產生 - 8字節鹽
$ - 符
E4ZsrluohHFxtcdqCH7jo. - 哈希

所以它看起來像Jasypt的BasicPasswordEncryptor可能是你want-什麼

+0

我對此表示懷疑,除非BasicPasswordEncryptor被有意設計爲與Flask FreeBSD MD5Crypt兼容。 – 2010-01-18 13:01:20

+0

好吧,它使用了MD5,8字節的salt和1000次迭代(這似乎是crypt算法使用的 - http://www.mail-archive.com/[email protected]/msg23405.html),我猜想這會留下實現本身。 。 。 – 2010-01-18 13:06:14

0

您可以找到C語言版本here的源代碼。將其轉換爲純Java應該很簡單。