V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
leavic
V2EX  ›  Linux

/etc/shadow 中的密码字符串是经过什么编码的吗?

  •  
  •   leavic · 2019-04-18 15:26:38 +08:00 · 4359 次点击
    这是一个创建于 2033 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在知道这个密码是密码+salt,用对应的 hash 算法算出来的,

    现在我用 python 来重现这个过程(使用 hashlib ),出来的结果只有 digest 和 hexdigest 两种,
    这两个一个是 bytes 数据,一个是 hex 数据,和 shadow 文件里的字符串都不同。

    那么,shadow 文件中的密码字符串是用 hex 数据或者 bytes 数据重新编码的吗?具体是什么编码方式呢?



    其实我的问题类似这个:
    https://stackoverflow.com/questions/53416164/md5-hash-in-python

    但是我想知道如果不用 crypt 模块能不能实现。
    第 1 条附言  ·  2019-04-19 09:33:00 +08:00
    https://www.vidarholen.net/contents/blog/?p=32
    这篇文章的解释应该说是非常详细了
    1.运算不是单纯第一次 md5,有个 1000 次的循环
    2.使用了 crypt 的特殊 base64 编码格式。
    9 条回复    2019-11-06 10:44:15 +08:00
    unclewang81
        1
    unclewang81  
       2019-04-18 15:50:57 +08:00
    如果格式为”$id$salt$hashed ”,则表示该用户密码正常。其中$id$的 id 表示密码的加密算法,$1$表示使用 MD5 算法,$2a$表示使用 Blowfish 算法,”$2y$”是另一算法长度的 Blowfish,”$5$”表示 SHA-256 算法,而”$6$”表示 SHA-512 算法,
    目前基本上都使用 sha-512 算法的,但无论是 md5 还是 sha-256 都仍然支持。$salt$是加密时使用的 salt,hashed 才是真正的密码部分。
    leavic
        2
    leavic  
    OP
       2019-04-18 15:52:34 +08:00
    @unclewang81 你说的这些部分我都知道,现在的关键是 hashed 部分,到底是什么格式编码的字符串?
    leavic
        3
    leavic  
    OP
       2019-04-18 15:54:02 +08:00
    @unclewang81 举个最简单的例子,我们一般看到的 md5 hash 都是 hex string 格式的,但 shadow 文件里的明显是不 hex string
    leavic
        4
    leavic  
    OP
       2019-04-18 15:57:08 +08:00
    例如假定密码是 mypassword,盐是 mysalt,那么用 openssl 生成的 shadow 密码如下:

    openssl passwd -1 -salt mysalt mypassword
    $1$mysalt$JyKGOJR1343sJ7N91hXVI/

    但用 hashlib 生成的 md5 hexdigest 如下:
    399b1141e55e53a9df428ed4585ca3e9

    这两个数据如何转换呢?
    ysc3839
        5
    ysc3839  
       2019-04-18 17:47:59 +08:00 via Android
    你给的链接已经是较好的答案了,直接使用 crypt 即可。
    不想用?那就自己实现吧。我帮你找到了 glibc 的实现。
    https://code.woboq.org/userspace/glibc/crypt/crypt-entry.c.html#__crypt_r
    mikeguan
        7
    mikeguan  
       2019-04-18 18:20:20 +08:00 via Android
    leavic
        8
    leavic  
    OP
       2019-04-19 09:25:32 +08:00
    @joesonw 感谢,看来 crypt 是用了自己的编码方式。
    xyjincan
        9
    xyjincan  
       2019-11-06 10:44:15 +08:00
    哇!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:41 · PVG 00:41 · LAX 08:41 · JFK 11:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.