java - AES Java 到 Python

标签 java python encryption aes

这是我从 Java 源代码获得的 AES 加密代码。这让我很烦恼,因为 Cipher 本身在它的初始化中不使用任何初始 vector - 因此我似乎无法在 Python 中做同样的事情。任何具有 Java 背景的人都可以帮助我理解这实际上是做什么的吗?

byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, (byte) 0xB4, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00};
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] myIv = {70, 114, 122, 82, 70, 114, 122, 82, 70, 114, 122, 82, 70, 114, 122, 82}
byte[] newIv = cipher.doFinal(myIv);

最佳答案

Java 有实现某些方案的提供者。方案是从字符串中选择的,在您的例子中是 Cipher.getInstance("AES")。由于无法在 Java 中运行纯 AES,因此它选择了一些默认值以使其成为一个完整的方案。

有必要确定操作模式和可选的填充模式。大多数 Java 提供程序在看到 "AES" 时默认为 "AES/ECB/PKCS5Padding"

现在 byte[] newIv = cipher.doFinal(myIv)。此行在 ECB 模式下使用 AES 加密明文 (myIv) 并应用 PKCS#7 填充。 ECB 模式不使用 IV,因此这是错误的变量命名,因为 myIv 不是用于加密的 IV。

This是一篇展示如何完成填充和取消填充的帖子。

关于java - AES Java 到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483738/

相关文章:

c# - UWP - 跨设备数据加密

java - Eclipse - 方法建议问题

python - 按 Pandas 数据框列的相同部分字符串分组

python - 将相对日期字符串转换为绝对日期

python - 使用 python 套接字发送/接收数据

c# - 据称在 .NET 中使用 AES-256 CBC 解密文件时出现问题

javax.crypto.BadPaddingException : Data must start with zero

java - Spring Boot GCP Data Spanner 延迟问题

java - 如何检查日历/日期对象中的特定变量是否与java匹配?

java - 从另一个类调用与Arraylist相关的方法