gpt4 book ai didi

避免违反 Liskov 替换原则的密码敏捷性的 Pythonic 解决方案

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:08 25 4
gpt4 key购买 nike

我需要在允许 crypto agility 的各种操作模式下围绕对称密码(AES、DES 等)在 python 中编写一组包装器.具体来说,调用包装器的代码不需要了解实际保护数据的内容,因此可以动态更改它

基本上以下内容应该成立(无论这些是对象上的方法、单独的函数还是其他东西)

foo = MagicalEncryptor()
foo.ciphertext = foo.encrypt(data)
key = foo.key
bar = MagicalEncryptor()
bar.key = key
data = bar.decrypt(ciphertext)

问题是根据使用的模式不同,得到的密文也会不同。对于 CBC,它可能是 (MODE_CBC,IV,ciphertext),对于 GCM 模式,它可能是 (MODE_GCM,IV,ciphertext,mac)。

这显然违反了 Liskov substitution principle因为它使解密协变的论点。如果调用者持有通用 magicalEncryptor 接口(interface)的实例,而该实例恰好用于 GCM 模式,则它不能将 ECB 模式的实例传递给它。

对此有什么好的 pythonic 解决方案? (或者答案就是不关心?)对于我特别需要做的事情,它应该在 2.7 和 3.0 中都可以工作,但我对两者的解决方案都很感兴趣。

此外, key 必须具有比特流的简短表示形式(最多可能为 128 或 256 位)。这旨在用于混合加密方案,例如,可以发送 (RSA_ENC(PublicKey,symetric_key_as_message)||AES(symetric_key_as_message,actual_message)。

最佳答案

跟随 Kirk,但在最后一刻放弃,让多态 key 负责选择正确类型的解密器:

foo = MagicalEncryptor()
foo.ciphertext = foo.encrypt(data)
key = foo.key

bar = key.decryptor()
data = bar.decrypt(ciphertext)

它可以创建适当的解密器并将其自身传入。或者其他任何东西: key 和创建解密器之间的协议(protocol)是私有(private)的。

我什至可以重新安排这样的事情:

key = createMagicalKey()

foo = key.encryptor()
ciphertext = foo.encrypt(data)

bar = key.decryptor()
data = bar.decrypt(ciphertext)

当然,这只是一个简单的步骤:

key = createMagicalKey()

ciphertext = key.encrypt(data)

data = key.decrypt(ciphertext)

关于避免违反 Liskov 替换原则的密码敏捷性的 Pythonic 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com