c# - key +初始化 vector 到新 key ?

标签 c# java security encryption aes

我有一个可以解密数据的 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/

相关文章:

c# - 获取母版页中的当前 Controller 和操作

c# - 我对新添加的 dll 引用使用什么 using 指令

java - EasyMock 和修改可变方法参数

java - 为什么我应该使用 java 和 php

c - C 标准库中的哪些函数通常鼓励不良做法?

php - 在 Apache 服务器上的 .PHP 文件中存储敏感信息有多安全?

security - WebInspect 生产系统

c# - 如何从 MatchCollection 中获取唯一元素

c# - 在 C# 中使用 File.OpenRead() 是否需要关闭?

java - 从字符串中解析日期