我有一个可以解密数据的 API。此 API 仅接收 key (AES key 的字节)。该API不接收初始化 vector (它使用零 vector 作为初始化 vector )。
我从第 3 方收到加密数据。该数据使用特定 key 和初始化 vector 加密为 AES 256。
我有 key 和初始化 vector 。有没有办法使用 API 来解密这些数据?或者,换句话说,如果 key 和初始化 vector 是常量并且我两者都有,我可以创建一个 key 来允许我使用 {0, 0, 0, ...} 初始化 vector 解密此数据吗?
谢谢。
最佳答案
是的,可以解密...不,不是按照您描述的方式
AES 是一种分组密码
大多数时候,密码不会按原样使用,而是被置于特殊的操作模式中(这是您的 API 可能无法做到的)
您必须围绕密码实现解密例程,并将 AES-API 用作加密原语
例如,使用通用 AES 实现对 AES-CBC 进行解密
将密文分割成 128 位 block 并从索引 1 开始编号
将 IV 添加为 cypher_block 0
现在为了获取明文,我们可以围绕您的 API 函数定义一个函数
plaintext_block[i] = cypher_block[i-1] XOR aes_decrypt(cypher_block[i],key)
如您所见,您可以获得从索引1开始的所有明文 block ...
一旦你获得了所有明文 block ,你可能会想要去除填充,但那是另一个故事了......
关于c# - key +初始化 vector 到新 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861475/