免责声明:我知道谷歌,而不是密码学。
从crypt
文档:
该模块实现了 crypt(3) 例程的接口,该例程是基于改进的 DES 算法的单向散列函数;有关详细信息,请参阅 Unix 手册页。可能的用途包括允许 Python 脚本接受用户输入的密码,或尝试用字典破解 Unix 密码。
你可以看看md5crypt.py
。或者,crypt
对于 Windows是GnuWin32的一部分。这是一些 Unix 手册页;Windows 界面应该类似。
CRYPT(3) Linux 程序员手册
CRYPT(3)
NAME crypt, crypt_r - 密码和数据加密
概要
#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char *key, const char *salt);
char *crypt_r(const char *key, const char *salt,
struct crypt_data *data);
与 -lcrypt 链接。
描述
crypt() 是密码加密函数。它基于数据加密标准算法,其变化旨在(除其他外)阻止使用密钥搜索的硬件实现。
key 是用户输入的密码。
salt 是从集合 [a–zA–Z0–9./] 中选择的两个字符的字符串。该字符串用于以 4096 种不同方式之一扰乱算法。
通过取密钥的前 8 个字符中每个字符的最低 7 位,得到一个 56 位的密钥。这个 56 位密钥用于重复加密一个常量字符串(通常是由全零组成的字符串)。返回的值指向加密的密码,一系列 13 个可打印的 ASCII 字符(前两个字符代表盐本身)。返回值指向其内容被每次调用覆盖的静态数据。
警告:密钥空间由 2**56 个等于 7.2e16 个可能的值组成。使用大规模并行计算机可以对这个关键空间进行详尽的搜索。可以使用诸如crack(1) 之类的软件来搜索该密钥空间中通常被人类用于密码的部分。因此,密码选择至少应避免使用常用词和名称。建议使用 passwd(1) 程序在选择过程中检查可破解密码。
DES 算法本身有一些怪癖,这使得使用 crypt() 接口对于除了密码身份验证之外的任何事情都是一个非常糟糕的选择。如果您打算将 crypt() 接口用于加密项目,请不要这样做:获取一本关于加密的好书和一个广泛可用的 DES 库。