上面这段python代码运行时仍然报错:TypeError: Expected instance of BlockCipherAlgorithm. 该如何解决呢?
时间: 2024-04-19 21:24:07 浏览: 112
非常抱歉之前给你的代码仍然有误。造成这个错误的原因是使用了错误的模式选择。在cryptography库中,CMAC只能在CBC模式下工作,而不能使用ECB模式。请将`modes.ECB()`改为`modes.CBC()`。下面是修复后的代码:
```python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives.cmac import CMAC
from cryptography.hazmat.backends import default_backend
# 输入的密钥
key = b"952B76AD1003E35763AE3FB9F1D01C5F"
# 输入的消息
message = b"0x330003C53B2A4EA388130001C0004fff"
# 创建AES-128算法的Cipher对象和CMAC对象
aes_cipher = Cipher(algorithms.AES(key), modes.CBC(b"\x00" * 16), backend=default_backend())
cmac_obj = CMAC(aes_cipher, backend=default_backend())
# 更新CMAC对象的输入消息
cmac_obj.update(message)
# 计算MAC值
mac = cmac_obj.finalize()
print(mac.hex())
```
这样,你应该能够成功计算出CMAC AES-128的MAC值了。对于CBC模式,你需要提供一个16字节的初始向量作为第二个参数传递给`modes.CBC()`。在这个示例中,我们使用了全零向量作为初始向量。请确保已经安装了cryptography库,并将`key`和`message`变量设置为你想要计算MAC的实际值。运行该代码将打印出计算得到的MAC值。非常抱歉之前给你带来的困扰,希望这次能够帮到你。
阅读全文