Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
e6e7b5f3
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e6e7b5f3
编写于
2月 11, 2000
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement MD5-based "apr1" password hash.
上级
b1f8affb
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
376 addition
and
78 deletion
+376
-78
Makefile.org
Makefile.org
+13
-8
apps/passwd.c
apps/passwd.c
+338
-64
doc/apps/passwd.pod
doc/apps/passwd.pod
+25
-6
未找到文件。
Makefile.org
浏览文件 @
e6e7b5f3
...
...
@@ -216,7 +216,7 @@ libclean:
rm
-f
*
.a
*
/lib
*
/
*
/lib
clean
:
rm
-f
shlib/
*
.o
*
.o core a.out fluff
*
.map
rm
-f
shlib/
*
.o
*
.o core a.out fluff
*
.map
rehash.time
@
for
i
in
$(DIRS)
;
\
do
\
(
cd
$$
i
&&
echo
"making clean in
$$
i..."
&&
\
...
...
@@ -259,8 +259,10 @@ dclean:
$(MAKE)
SDIRS
=
'
${SDIRS}
'
PERL
=
'
${PERL}
'
dclean
)
||
exit
1
;
\
done
;
rehash
:
rehash
:
rehash.time
rehash.time
:
certs
@
(
OPENSSL
=
"
`
pwd
`
/apps/openssl"
;
export
OPENSSL
;
sh tools/c_rehash certs
)
touch
.rehash.time
test
:
tests
...
...
@@ -326,18 +328,14 @@ dist:
dist_pem_h
:
(
cd
crypto/pem
;
$(MAKE)
CC
=
'
${CC}
'
SDIRS
=
'
${SDIRS}
'
CFLAG
=
'
${CFLAG}
'
pem.h
;
$(MAKE)
clean
)
install
:
all
install
:
all
install_docs
@
$(PERL)
$(TOP)
/util/mkdir-p.pl
$(INSTALL_PREFIX)$(INSTALLTOP)
/bin
\
$(INSTALL_PREFIX)$(INSTALLTOP)
/lib
\
$(INSTALL_PREFIX)$(INSTALLTOP)
/include/openssl
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/misc
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/certs
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/private
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/lib
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man1
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man3
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man5
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man7
$(INSTALL_PREFIX)$(OPENSSLDIR)
/lib
@
for
i
in
$(EXHEADER)
;
\
do
\
(
cp
$$
i
$(INSTALL_PREFIX)$(INSTALLTOP)
/include/openssl/
$$
i
;
\
...
...
@@ -355,6 +353,13 @@ install: all
$(RANLIB)
$(INSTALL_PREFIX)$(INSTALLTOP)
/lib/
$$
i
;
\
chmod
644
$(INSTALL_PREFIX)$(INSTALLTOP)
/lib/
$$
i
)
;
\
done
install_docs
:
@
$(PERL)
$(TOP)
/util/mkdir-p.pl
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man1
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man3
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man5
\
$(INSTALL_PREFIX)$(OPENSSLDIR)
/man/man7
@
echo
installing man 1 and man 5
@
for
i
in
doc/apps/
*
.pod
;
do
(
cd
`
dirname
$$
i
`
;
fn
=
`
basename
$$
i .pod
`
;
sec
=
`
[
"
$$
fn"
=
"config"
]
&&
echo
5
||
echo
1
`
;
../../util/pod2man.pl
--section
=
$$
sec
--center
=
OpenSSL
--release
=
$(VERSION)
`
basename
$$
i
`
>
$(INSTALL_PREFIX)$(INSTALLTOP)
/man/man
$$
sec/
`
basename
$$
i .pod
`
.
$$
sec
)
;
done
@
echo
installing man 3 and man 7
...
...
apps/passwd.c
浏览文件 @
e6e7b5f3
/* apps/passwd.c */
#if !defined(NO_DES)
/* && !defined(prerequisites of other algorithms) */
#if !defined(NO_DES)
|| !defined(NO_MD5)
#include <assert.h>
#include <string.h>
...
...
@@ -12,9 +12,17 @@
#include <openssl/evp.h>
#include <openssl/rand.h>
#if defined NO_MD5 || defined CHARSET_EBCDIC
# define NO_APR1
#endif
#ifndef NO_DES
# include <openssl/des.h>
#endif
#ifndef NO_APR1
# include <openssl/des.h>
#endif
#undef PROG
#define PROG passwd_main
...
...
@@ -32,21 +40,32 @@ static unsigned const char cov_2char[64]={
0x73
,
0x74
,
0x75
,
0x76
,
0x77
,
0x78
,
0x79
,
0x7A
};
static
int
do_passwd
(
int
passed_salt
,
char
**
salt_p
,
char
**
salt_malloc_p
,
char
*
passwd
,
BIO
*
out
,
int
quiet
,
int
table
,
int
reverse
,
size_t
pw_maxlen
,
int
usecrypt
,
int
useapr1
);
/* -crypt - standard Unix password algorithm (default, only choice)
* -apr1 - MD5-based password algorithm
* -salt string - salt
* -in file - read passwords from file
* -stdin - read passwords from stdin
* -quiet - no warnings
* -table - format output as table
* -reverse - switch table columns
*/
int
MAIN
(
int
argc
,
char
**
argv
)
{
int
ret
=
1
;
char
*
salt
=
NULL
,
*
passwd
,
**
passwds
=
NULL
;
char
*
infile
=
NULL
;
int
in_stdin
=
0
;
char
*
salt
=
NULL
,
*
passwd
=
NULL
,
**
passwds
=
NULL
;
char
*
salt_malloc
=
NULL
,
*
passwd_malloc
=
NULL
;
BIO
*
out
=
NULL
;
int
pw_source_defined
=
0
;
BIO
*
in
=
NULL
,
*
out
=
NULL
;
int
i
,
badopt
,
opt_done
;
int
passed_salt
=
0
,
quiet
=
0
,
table
=
0
;
int
usecrypt
=
0
;
int
passed_salt
=
0
,
quiet
=
0
,
table
=
0
,
reverse
=
0
;
int
usecrypt
=
0
,
useapr1
=
0
;
size_t
pw_maxlen
=
0
;
apps_startup
();
...
...
@@ -65,6 +84,8 @@ int MAIN(int argc, char **argv)
{
if
(
strcmp
(
argv
[
i
],
"-crypt"
)
==
0
)
usecrypt
=
1
;
else
if
(
strcmp
(
argv
[
i
],
"-apr1"
)
==
0
)
useapr1
=
1
;
else
if
(
strcmp
(
argv
[
i
],
"-salt"
)
==
0
)
{
if
((
argv
[
i
+
1
]
!=
NULL
)
&&
(
salt
==
NULL
))
...
...
@@ -72,121 +93,374 @@ int MAIN(int argc, char **argv)
passed_salt
=
1
;
salt
=
argv
[
++
i
];
}
else
badopt
=
1
;
else
badopt
=
1
;
}
else
if
(
strcmp
(
argv
[
i
],
"-in"
)
==
0
)
{
if
((
argv
[
i
+
1
]
!=
NULL
)
&&
!
pw_source_defined
)
{
pw_source_defined
=
1
;
infile
=
argv
[
++
i
];
}
else
badopt
=
1
;
}
else
if
(
strcmp
(
argv
[
i
],
"-stdin"
)
==
0
)
{
if
(
!
pw_source_defined
)
{
pw_source_defined
=
1
;
in_stdin
=
1
;
}
else
badopt
=
1
;
}
else
if
(
strcmp
(
argv
[
i
],
"-quiet"
)
==
0
)
quiet
=
1
;
else
if
(
strcmp
(
argv
[
i
],
"-table"
)
==
0
)
table
=
1
;
else
if
(
strcmp
(
argv
[
i
],
"-reverse"
)
==
0
)
reverse
=
1
;
else
if
(
argv
[
i
][
0
]
==
'-'
)
badopt
=
1
;
else
/* non-option argument */
else
if
(
!
pw_source_defined
)
/* non-option argument
s, use as passwords
*/
{
pw_source_defined
=
1
;
passwds
=
&
argv
[
i
];
opt_done
=
1
;
}
else
badopt
=
1
;
}
if
(
usecrypt
/* + algo2 + algo3 + ... */
==
0
)
/* use default */
if
(
!
usecrypt
&&
!
useapr1
)
/* use default */
usecrypt
=
1
;
if
(
usecrypt
/* + algo2 + algo3 */
>
1
)
/* conflict */
if
(
usecrypt
+
useapr1
>
1
)
/* conflict */
badopt
=
1
;
/* reject unsupported algorithms */
#ifdef NO_DES
if
(
usecrypt
)
badopt
=
1
;
#endif
#ifdef NO_APR1
if
(
useapr1
)
badopt
=
1
;
#endif
if
(
badopt
)
{
BIO_printf
(
bio_err
,
"Usage: passwd [options] [passwords]
\n
"
);
BIO_printf
(
bio_err
,
"where options are
\n
"
);
#ifndef NO_DES
BIO_printf
(
bio_err
,
"-crypt standard Unix password algorithm (default)
\n
"
);
#endif
#ifndef NO_APR1
BIO_printf
(
bio_err
,
"-apr1 MD5-based password algorithm
\n
"
);
#endif
BIO_printf
(
bio_err
,
"-salt string use provided salt
\n
"
);
BIO_printf
(
bio_err
,
"-in file read passwords from file
\n
"
);
BIO_printf
(
bio_err
,
"-stdin read passwords from stdin
\n
"
);
BIO_printf
(
bio_err
,
"-quiet no warnings
\n
"
);
BIO_printf
(
bio_err
,
"-table format output as table
\n
"
);
BIO_printf
(
bio_err
,
"-reverse switch table columns
\n
"
);
goto
err
;
}
if
((
infile
!=
NULL
)
||
in_stdin
)
{
in
=
BIO_new
(
BIO_s_file
());
if
(
in
==
NULL
)
goto
err
;
if
(
infile
!=
NULL
)
{
assert
(
in_stdin
==
0
);
if
(
BIO_read_filename
(
in
,
infile
)
<=
0
)
goto
err
;
}
else
{
assert
(
in_stdin
);
BIO_set_fp
(
in
,
stdin
,
BIO_NOCLOSE
);
}
}
if
(
usecrypt
)
pw_maxlen
=
8
;
/* else if ... */
else
if
(
useapr1
)
pw_maxlen
=
256
;
/* arbitrary limit, should be enough for most passwords */
if
(
passwds
==
NULL
)
{
/* no passwords on the command line */
passwd
=
passwd_malloc
=
Malloc
(
pw_maxlen
+
1
);
if
(
passwd_malloc
==
NULL
)
goto
err
;
}
if
((
in
==
NULL
)
&&
(
passwds
==
NULL
))
{
/* build a null-terminated list */
static
char
*
passwds_static
[
2
]
=
{
NULL
,
NULL
};
passwds
=
passwds_static
;
passwd_malloc
=
Malloc
(
pw_maxlen
+
1
);
if
(
passwd_malloc
==
NULL
)
goto
err
;
if
(
EVP_read_pw_string
(
passwd_malloc
,
pw_maxlen
+
1
,
"Password: "
,
0
)
!=
0
)
goto
err
;
if
(
in
==
NULL
)
if
(
EVP_read_pw_string
(
passwd_malloc
,
pw_maxlen
+
1
,
"Password: "
,
0
)
!=
0
)
goto
err
;
passwds
[
0
]
=
passwd_malloc
;
}
assert
(
passwds
!=
NULL
);
assert
(
*
passwds
!=
NULL
);
do
/* loop over list of passwords */
if
(
in
==
NULL
)
{
assert
(
passwds
!=
NULL
);
assert
(
*
passwds
!=
NULL
);
do
/* loop over list of passwords */
{
passwd
=
*
passwds
++
;
if
(
!
do_passwd
(
passed_salt
,
&
salt
,
&
salt_malloc
,
passwd
,
out
,
quiet
,
table
,
reverse
,
pw_maxlen
,
usecrypt
,
useapr1
))
goto
err
;
}
while
(
*
passwds
!=
NULL
);
}
else
/* in != NULL */
{
/* first make sure we have a salt */
if
(
!
passed_salt
)
int
done
;
assert
(
passwd
!=
NULL
);
do
{
if
(
usecrypt
)
int
r
=
BIO_gets
(
in
,
passwd
,
pw_maxlen
+
1
);
if
(
r
>
0
)
{
if
(
salt_malloc
==
NULL
)
char
*
c
=
(
strchr
(
passwd
,
'\n'
))
;
if
(
c
!=
NULL
)
*
c
=
0
;
/* truncate at newline */
else
{
salt
=
salt_malloc
=
Malloc
(
3
);
if
(
salt_malloc
==
NULL
)
goto
err
;
/* ignore rest of line */
char
trash
[
BUFSIZ
];
do
r
=
BIO_gets
(
in
,
trash
,
sizeof
trash
);
while
((
r
>
0
)
&&
(
!
strchr
(
trash
,
'\n'
)));
}
if
(
RAND_pseudo_bytes
((
unsigned
char
*
)
salt
,
2
)
<
0
)
if
(
!
do_passwd
(
passed_salt
,
&
salt
,
&
salt_malloc
,
passwd
,
out
,
quiet
,
table
,
reverse
,
pw_maxlen
,
usecrypt
,
useapr1
))
goto
err
;
salt
[
0
]
=
cov_2char
[
salt
[
0
]
&
0x3f
];
/* 6 bits */
salt
[
1
]
=
cov_2char
[
salt
[
1
]
&
0x3f
];
/* 6 bits */
salt
[
2
]
=
0
;
#ifdef CHARSET_EBCDIC
ascii2ebcdic
(
salt
,
salt
,
2
);
/* des_crypt will convert
* back to ASCII */
#endif
}
/* else if (algo2) ... */
}
assert
(
salt
!=
NULL
);
/* truncate password if necessary */
passwd
=
*
passwds
++
;
if
((
strlen
(
passwd
)
>
pw_maxlen
))
{
if
(
!
quiet
)
BIO_printf
(
bio_err
,
"Warning: truncating password to %u characters
\n
"
,
pw_maxlen
);
passwd
[
pw_maxlen
]
=
0
;
}
assert
(
strlen
(
passwd
)
<=
pw_maxlen
);
/* now compute password hash */
if
(
usecrypt
)
{
char
*
hash
=
des_crypt
(
passwd
,
salt
);
if
(
table
)
BIO_printf
(
out
,
"%s
\t
%s
\n
"
,
passwd
,
hash
);
else
BIO_printf
(
out
,
"%s
\n
"
,
hash
);
done
=
(
r
<=
0
);
}
/* else if (algo2) { ... } else if (algo3) { ... } */
else
assert
(
0
);
while
(
!
done
);
}
while
(
*
passwds
!=
NULL
);
err:
ERR_print_errors
(
bio_err
);
if
(
salt_malloc
)
Free
(
salt_malloc
);
if
(
passwd_malloc
)
Free
(
passwd_malloc
);
if
(
in
)
BIO_free
(
in
);
if
(
out
)
BIO_free
(
out
);
EXIT
(
ret
);
}
#ifndef NO_APR1
/* MD5-based password algorithm compatible to the one found in Apache
* (should probably be available as a library function;
* then the static buffer would not be acceptable) */
static
char
*
apr1_crypt
(
const
char
*
passwd
,
const
char
*
salt
)
{
static
char
out_buf
[
6
+
9
+
24
+
2
];
/* "$apr1$..salt..$.......md5hash..........\0" */
unsigned
char
buf
[
MD5_DIGEST_LENGTH
];
char
*
salt_out
;
int
n
,
i
;
MD5_CTX
md
;
size_t
passwd_len
,
salt_len
;
passwd_len
=
strlen
(
passwd
);
strcpy
(
out_buf
,
"$apr1$"
);
strncat
(
out_buf
,
salt
,
8
);
assert
(
strlen
(
out_buf
)
<=
6
+
8
);
/* "$apr1$..salt.." */
salt_out
=
out_buf
+
6
;
salt_len
=
strlen
(
salt_out
);
assert
(
salt_len
<=
8
);
MD5_Init
(
&
md
);
MD5_Update
(
&
md
,
passwd
,
passwd_len
);
MD5_Update
(
&
md
,
"$apr1$"
,
6
);
MD5_Update
(
&
md
,
salt_out
,
salt_len
);
{
MD5_CTX
md2
;
MD5_Init
(
&
md2
);
MD5_Update
(
&
md2
,
passwd
,
passwd_len
);
MD5_Update
(
&
md2
,
salt_out
,
salt_len
);
MD5_Update
(
&
md2
,
passwd
,
passwd_len
);
MD5_Final
(
buf
,
&
md2
);
}
for
(
i
=
passwd_len
;
i
>
sizeof
buf
;
i
-=
sizeof
buf
)
MD5_Update
(
&
md
,
buf
,
sizeof
buf
);
MD5_Update
(
&
md
,
buf
,
i
);
n
=
passwd_len
;
while
(
n
)
{
MD5_Update
(
&
md
,
(
n
&
1
)
?
"
\0
"
:
passwd
,
1
);
n
>>=
1
;
}
MD5_Final
(
buf
,
&
md
);
for
(
i
=
0
;
i
<
1000
;
i
++
)
{
MD5_CTX
md2
;
MD5_Init
(
&
md2
);
MD5_Update
(
&
md2
,
(
i
&
1
)
?
(
unsigned
char
*
)
passwd
:
buf
,
(
i
&
1
)
?
passwd_len
:
sizeof
buf
);
if
(
i
%
3
)
MD5_Update
(
&
md2
,
salt_out
,
salt_len
);
if
(
i
%
7
)
MD5_Update
(
&
md2
,
passwd
,
passwd_len
);
MD5_Update
(
&
md2
,
(
i
&
1
)
?
buf
:
(
unsigned
char
*
)
passwd
,
(
i
&
1
)
?
sizeof
buf
:
passwd_len
);
MD5_Final
(
buf
,
&
md2
);
}
{
/* transform buf into output string */
unsigned
char
buf_perm
[
sizeof
buf
];
int
dest
,
source
;
char
*
output
;
/* silly output permutation */
for
(
dest
=
0
,
source
=
0
;
dest
<
14
;
dest
++
,
source
=
(
source
+
6
)
%
17
)
buf_perm
[
dest
]
=
buf
[
source
];
buf_perm
[
14
]
=
buf
[
5
];
buf_perm
[
15
]
=
buf
[
11
];
assert
(
16
==
sizeof
buf_perm
);
output
=
salt_out
+
salt_len
;
assert
(
output
==
out_buf
+
strlen
(
out_buf
));
*
output
++
=
'$'
;
for
(
i
=
0
;
i
<
15
;
i
+=
3
)
{
*
output
++
=
cov_2char
[
buf_perm
[
i
+
2
]
&
0x3f
];
*
output
++
=
cov_2char
[((
buf_perm
[
i
+
1
]
&
0xf
)
<<
2
)
|
(
buf_perm
[
i
+
2
]
>>
6
)];
*
output
++
=
cov_2char
[((
buf_perm
[
i
]
&
3
)
<<
4
)
|
(
buf_perm
[
i
+
1
]
>>
4
)];
*
output
++
=
cov_2char
[
buf_perm
[
i
]
>>
2
];
}
assert
(
i
==
15
);
*
output
++
=
cov_2char
[
buf_perm
[
i
]
&
0x3f
];
*
output
++
=
cov_2char
[
buf_perm
[
i
]
>>
6
];
*
output
=
0
;
assert
(
strlen
(
out_buf
)
<
sizeof
(
out_buf
));
}
return
out_buf
;
}
#endif
static
int
do_passwd
(
int
passed_salt
,
char
**
salt_p
,
char
**
salt_malloc_p
,
char
*
passwd
,
BIO
*
out
,
int
quiet
,
int
table
,
int
reverse
,
size_t
pw_maxlen
,
int
usecrypt
,
int
useapr1
)
{
char
*
hash
=
NULL
;
assert
(
salt_p
!=
NULL
);
assert
(
salt_malloc_p
!=
NULL
);
/* first make sure we have a salt */
if
(
!
passed_salt
)
{
#ifndef NO_DES
if
(
usecrypt
)
{
if
(
*
salt_malloc_p
==
NULL
)
{
*
salt_p
=
*
salt_malloc_p
=
Malloc
(
3
);
if
(
*
salt_malloc_p
==
NULL
)
goto
err
;
}
if
(
RAND_pseudo_bytes
((
unsigned
char
*
)
*
salt_p
,
2
)
<
0
)
goto
err
;
(
*
salt_p
)[
0
]
=
cov_2char
[(
*
salt_p
)[
0
]
&
0x3f
];
/* 6 bits */
(
*
salt_p
)[
1
]
=
cov_2char
[(
*
salt_p
)[
1
]
&
0x3f
];
/* 6 bits */
(
*
salt_p
)[
2
]
=
0
;
#ifdef CHARSET_EBCDIC
ascii2ebcdic
(
*
salt_p
,
*
salt_p
,
2
);
/* des_crypt will convert
* back to ASCII */
#endif
}
#endif
/* !NO_DES */
#ifndef NO_APR1
if
(
useapr1
)
{
int
i
;
if
(
*
salt_malloc_p
==
NULL
)
{
*
salt_p
=
*
salt_malloc_p
=
Malloc
(
9
);
if
(
*
salt_malloc_p
==
NULL
)
goto
err
;
}
if
(
RAND_pseudo_bytes
((
unsigned
char
*
)
*
salt_p
,
8
)
<
0
)
goto
err
;
for
(
i
=
0
;
i
<
8
;
i
++
)
(
*
salt_p
)[
i
]
=
cov_2char
[(
*
salt_p
)[
i
]
&
0x3f
];
/* 6 bits */
(
*
salt_p
)[
8
]
=
0
;
}
#endif
/* !NO_APR1 */
}
assert
(
*
salt_p
!=
NULL
);
/* truncate password if necessary */
if
((
strlen
(
passwd
)
>
pw_maxlen
))
{
if
(
!
quiet
)
BIO_printf
(
bio_err
,
"Warning: truncating password to %u characters
\n
"
,
pw_maxlen
);
passwd
[
pw_maxlen
]
=
0
;
}
assert
(
strlen
(
passwd
)
<=
pw_maxlen
);
/* now compute password hash */
#ifndef NO_DES
if
(
usecrypt
)
hash
=
des_crypt
(
passwd
,
*
salt_p
);
#endif
#ifndef NO_APR1
if
(
useapr1
)
hash
=
apr1_crypt
(
passwd
,
*
salt_p
);
#endif
assert
(
hash
!=
NULL
);
if
(
table
&&
!
reverse
)
BIO_printf
(
out
,
"%s
\t
%s
\n
"
,
passwd
,
hash
);
else
if
(
table
&&
reverse
)
BIO_printf
(
out
,
"%s
\t
%s
\n
"
,
hash
,
passwd
);
else
BIO_printf
(
out
,
"%s
\n
"
,
hash
);
return
1
;
err:
return
0
;
}
#endif
doc/apps/passwd.pod
浏览文件 @
e6e7b5f3
...
...
@@ -8,17 +8,22 @@ passwd - compute password hashes
B<openssl passwd>
[B<-crypt>]
[B<-apr1>]
[B<-salt string>]
[B<-in file>]
[B<-stdin>]
[B<-quiet>]
[B<-table>]
{B<password>}
=head1 DESCRIPTION
The B<passwd> command computes the hashes of a list of passwords
passed on the command line, or the hash of a password typed at run-time.
Currently only the Unix standard algorithm B<crypt>
is implemented.
The B<passwd> command computes the hash of a password typed at
run-time or the hash of each password in a list. The password list is
taken from the named file for option B<-in file>, from stdin for
option B<-stdin>, and from the command line otherwise.
The Unix standard algorithm B<crypt> and the MD5-based B<apr1> algorithm
are available.
=head1 OPTIONS
...
...
@@ -28,13 +33,25 @@ is implemented.
Use the B<crypt> algorithm (default).
=item B<-apr1>
Use the B<apr1> algorithm.
=item B<-salt string>
Use the specified salt.
=item B<-in file>
Read passwords from B<file>.
=item B<-stdin>
Read passwords from B<stdin>.
=item B<-quiet>
Don't output warnings when passwords are truncated.
Don't output warnings when passwords
given at the command line
are truncated.
=item B<-table>
...
...
@@ -45,6 +62,8 @@ to each password hash.
=head1 EXAMPLE
B<openssl passwd -salt xx password> prints B<xxj31ZMTZzkVA>.
B<openssl passwd -crypt -salt xx password> prints B<xxj31ZMTZzkVA>.
B<openssl passwd -apr1 -salt xx password> prints B<$apr1$xx$2eRrCdRwKOfJOth0w31wR.>.
=cut
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录