我正在尝试比较两个字符串,但只有当我在 python3 中对它们运行 repr 时,它们才会有所不同

I am trying to compare two strings but they are only different when I run repr on them in python3

提问人:Dihmz 提问时间:5/23/2023 最后编辑:Dihmz 更新时间:5/23/2023 访问量:66

问:

我在 python 中有两个字符串存储在变量 a 和 b 中。 a 是传递给脚本的参数,b 是解码 win32crypt 结果的结果。我终于使用 repr 来比较它们,毫不奇怪,参数返回为“windows”一词,但 b 返回为“w\x00i\x00n\x00d\x00o\x00w\x00s\x00”。我知道我可能可以编写一些代码来摆脱 \x00,并且我在网上发现这是某种本质上为字符添加重音的方法,但想知道是否有更好的方法将 b 转换为纯文本或将 a 转换为与 b 相同的格式。下面是没有导入的代码的基本表示形式。

def decrypt(password):
    _, decrypted_password_string = win32crypt.CryptUnprotectData(binascii.unhexlify(password), None, None, None, 0)
    #print(decrypted_password_string.decode())
    return decrypted_password_string.decode()

main(a):
    b = encryptedstringfromcsv
    b=decrypt(b)
    if a == b:
        print('true')
    else:
        print('false')

总是打印 false,我假设由于 repr 值。我希望它打印为 true

python unicode dpapi

评论

0赞 Giacomo Catenazzi 5/23/2023
在处理安全性时,不要删除任何字符(如您的情况:密码)。我只是认为 API 不是为 Python 设计的,所以您可能会获得 UTF-16 编码,而 python 想要自己的 Unicode 字符串。或者,也许您从编码错误的简历中读取。您应该在每一步都更加明确地进行编码
0赞 JonSG 5/23/2023
b'w\x00i\x00n\x00d\x00o\x00w\x00s\x00'.decode("utf-16")--->“窗口”
0赞 byxor 5/23/2023
您从中返回一个值,但您没有将其存储在任何位置的变量中decrypt
0赞 Dihmz 5/23/2023
明白了。所以结果是 UTF-16。我想知道我是否只是在 utf-16 上进行编码/解码,如果这样可以解决它。我通常不接触编码,所以我需要调查一下。@byxor,对不起,示例代码没有变量的存储,但它存储在代码中。乔恩,要尝试你的解决方案,感谢快速回复
1赞 Dihmz 5/23/2023
我在解密函数末尾的解码中添加了“utf-16”。非常感谢您的帮助@JonSG

答:

0赞 Dihmz 5/23/2023 #1

@JonSG上面指定我可以解码 utf-16。将其添加到我的解密函数的解码部分修复了它。非常感谢:)

评论

0赞 Dihmz 5/24/2023
我两天都不能接受自己的答案。如果其他人的回答基本上相同,我会接受它作为答案。否则,我会在两天后接受我的答案。
0赞 theRockers 5/23/2023 #2

看起来 main() 中的解密值实际上并没有保存在任何地方。尝试更改

decrypt(b)

b = decrypt(b)

评论

0赞 Dihmz 5/23/2023
嘿,摇滚乐手。我忘了在这里的简化代码中添加 b=,但对其进行了编辑。我回答了最终修复它的原因,但我无法接受 2 天。不过,对于响应