how to generate a hash like apache's htpasswd using java

送分小仙女□ 提交于 2019-12-04 03:24:57

问题


i use "Force MD5 encryption of the password" in htpasswd to generate a hash for instance '123' i get:

use htpasswd: 123 => $apr1$kaTbKaLO$ewJXRZAKpjaxK4thy2jOp/

use MD5 digest: 123 => 202cb962ac59075b964b07152d234b70

please tell me how can i generate a hash like the apache htpasswd using java Thanks.


回答1:


Passwords in Apache .htpasswd files are encoded using a salt. If you want to generate these passwords using Java you'll need to do the same. This site has an explanation of the salt/hashing algorithm used for Apache's .htpasswd files; I am looking for an actual algorithm you could use and will edit my answer after I find one.

EDIT: Looks like it's been asked before, right here on SO:

Programmaticly building htpasswd

Here's the documentation from Apache, along with their source code:

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

http://svn.apache.org/viewvc/apr/apr-util/branches/1.3.x/crypto/apr_md5.c?view=co




回答2:


I found where someone's tackled this in java & released it with a beer-ware license. Better late than never right? It's been there probably since 2007 so I'd be surprised if you hadn't eventually found it some time after asking in 2010.

"Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu"

"MD5Crypt.java is a port of Poul-Henning Kamp's original FreeBSD MD5-based hash algorithm, with additional methods to support the Apache HTTPd server variant of this algorithm."

"The resulting string will be in the form '$apr1$<salt>$<hashed mess>'"

ftp://ftp.arlut.utexas.edu/pub/java_hashes/




回答3:


http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml




回答4:


Md5Crypt is what you are looking for. It implements Apache htpasswd algorithms

Apache-specific algorithm using an iterated (1,000 times) MD5 digest of various combinations of a random 32-bit salt and the password.

import org.apache.commons.codec.digest.Md5Crypt;
...
String enPasswd = Md5Crypt.md5Crypt("your plain password".getBytes());
String htpasswdContent = "your username:" + enPasswd;


来源:https://stackoverflow.com/questions/2469197/how-to-generate-a-hash-like-apaches-htpasswd-using-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!