【问题标题】:Mask passwords in key value list regex在键值列表正则表达式中屏蔽密码
【发布时间】:2018-02-19 16:50:08
【问题描述】:

我有一个键值对列表:

gkketl1Pwd=SDFDSFSFD_213213#asdsad,tech1User=WQEWQQW,techPwd=sdfdsfdM9S,gkkhistPwd=FDSFDDF_WISD01#sad,render1Pwd="SADcyx12321321,213213,recoveryPwd=asdsaSA"ycNJ,9CB9PAJ2w4AbqBHB!,trustStorePwd=test,

我想记录这个字符串,但我不想打印出密码。我不想注销密码,而是想先屏蔽它们。

我正在使用 Python,目前使用以下表达式来屏蔽密码:

maskedValue=re.sub("([\\w]*Pwd=)(.[^,]*)", lambda m: "%s*****" % m.group(1), args[1])

很遗憾,如果密码中包含逗号,则代码无法完全正常工作。那么有谁知道如何完全屏蔽包含逗号的密码。

【问题讨论】:

    标签: python regex passwords mask


    【解决方案1】:

    您可以扩展该模式以匹配任何 , 后面不带 1+ 个单词字符,然后是 = 或字符串结尾:

    (\w*Pwd=)([^,]*(?:,(?!\w+=|$)[^,]*)*)
                   ^^^^^^^^^^^^^^^^^^^^^
    

    regex demo

    详情

    • (\w*Pwd=) - 第 1 组:零个或多个单词字符,后跟 Pwd 子字符串 和一个等号
    • ([^,]*(?:,(?!\w+=)[^,]*)*) - 第 2 组匹配
      • [^,]* - 除, 字符之外的任何 0+ 个字符
      • (?:,(?!\w+=|$)[^,]*)* - 零次或多次后续出现:
        • ,(?!\w+=|$) - 一个 ,,后面不跟 1 个或多个单词字符,后面跟 = 符号或字符串结尾
        • [^,]* - 除, 字符以外的任何 0+ 个字符

    Python demo

    import re
    s = 'gkketl1Pwd=SDFDSFSFD_213213#asdsad,tech1User=WQEWQQW,techPwd=sdfdsfdM9S,gkkhistPwd=FDSFDDF_WISD01#sad,render1Pwd="SADcyx12321321,213213,recoveryPwd=asdsaSA"ycNJ,9CB9PAJ2w4AbqBHB!,trustStorePwd=test,'
    maskedValue=re.sub(r"(\w*Pwd=)([^,]*(?:,(?!\w+=|$)[^,]*)*)", lambda m: "{}*****".format(m.group(1)), s)
    print(maskedValue)
    # => gkketl1Pwd=*****,tech1User=WQEWQQW,techPwd=*****,gkkhistPwd=*****,render1Pwd=*****,recoveryPwd=*****,trustStorePwd=*****,
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多