FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Lib/crypt.py at 3.5 · python/cpython · GitHub
python
cpython
Repository navigation
Code
Issues
5k+
(5k+)
Pull requests
2.5k
(2.5k)
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Lib
/
crypt.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
62 lines (44 loc) · 1.83 KB
Breadcrumbs
cpython
/
Lib
/
crypt.py
Copy path
File metadata and controls
62 lines (44 loc) · 1.83 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""Wrapper to the POSIX crypt library call and associated functionality."""
import
_crypt
import
string
as
_string
from
random
import
SystemRandom
as
_SystemRandom
from
collections
import
namedtuple
as
_namedtuple
_saltchars
=
_string
.
ascii_letters
+
_string
.
digits
+
'./'
_sr
=
_SystemRandom
()
class
_Method
(
_namedtuple
(
'_Method'
,
'name ident salt_chars total_size'
)):
"""Class representing a salt method per the Modular Crypt Format or the
legacy 2-character crypt method."""
def
__repr__
(
self
):
return
'<crypt.METHOD_{}>'
.
format
(
self
.
name
)
def
mksalt
(
method
=
None
):
"""Generate a salt for the specified method.
If not specified, the strongest available method will be used.
"""
if
method
is
None
:
method
=
methods
[
0
]
s
=
'${}$'
.
format
(
method
.
ident
)
if
method
.
ident
else
''
s
+=
''
.
join
(
_sr
.
choice
(
_saltchars
)
for
char
in
range
(
method
.
salt_chars
))
return
s
def
crypt
(
word
,
salt
=
None
):
"""Return a string representing the one-way hash of a password, with a salt
prepended.
If ``salt`` is not specified or is ``None``, the strongest
available method will be selected and a salt generated. Otherwise,
``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as
returned by ``crypt.mksalt()``.
"""
if
salt
is
None
or
isinstance
(
salt
,
_Method
):
salt
=
mksalt
(
salt
)
return
_crypt
.
crypt
(
word
,
salt
)
# available salting/crypto methods
METHOD_CRYPT
=
_Method
(
'CRYPT'
,
None
,
2
,
13
)
METHOD_MD5
=
_Method
(
'MD5'
,
'1'
,
8
,
34
)
METHOD_SHA256
=
_Method
(
'SHA256'
,
'5'
,
16
,
63
)
METHOD_SHA512
=
_Method
(
'SHA512'
,
'6'
,
16
,
106
)
methods
=
[]
for
_method
in
(
METHOD_SHA512
,
METHOD_SHA256
,
METHOD_MD5
):
_result
=
crypt
(
''
,
_method
)
if
_result
and
len
(
_result
)
==
_method
.
total_size
:
methods
.
append
(
_method
)
methods
.
append
(
METHOD_CRYPT
)
del
_result
,
_method
Back
|
FazBrowse Home
|
New Git URL