2

我将如何确定密钥的加密(AES256 或 3DES 256)...因为两个密钥都是 32 个字符(每个字符 8 位 * 32 字符)=256 位和 Mime 编码。

例子

MQAyAEgAOgA5ADUAMwA3AD8AQgBFAD4A --->AES256 密钥

g1EOWGFb+JjCZ7BbH2RergtKUtDfXrNb --->3DES 密钥

AES 密钥是在 Openssl 中制作的,而 3DES 密钥是使用 Java 和以下 API 制作的。

javax.crypto.Cipher;
 javax.crypto.KeyGenerator;
 javax.crypto.SecretKey;
 javax.crypto.SecretKeyFactory;
 javax.crypto.spec.DESedeKeySpec;
 javax.crypto.spec.IvParameterSpec;
4

1 回答 1

2

首先,没有 3DES 256 之类的东西。3DES 的密钥大小为 128 或 192 位,其中有效使用了 112 和 168 位。请注意,3DES 的安全裕度甚至更低。

另一方面,AES 可用于 128、192 和 256 位,所有这些都已使用。

现在 base 64(不是 SMIME,这是一个更高级别的协议)每个字符有 6 位(不排除末尾的虚假位)。如果我检查您的密钥,它们的大小都是 192 位,因此无法帮助您区分密钥。您可以使用 Apache Codec 库来解码 base 64 字符串。

但是,您的 3DES 密钥(第二个密钥)似乎对 3 个单个 DES 密钥使用奇校验字节。这可以用来区分密钥。请注意,这不是万无一失的,随机生成的AES 密钥可能只是偶然正确设置了奇偶校验位。但是,发生这种情况的机会大约是2^24.

可以使用该方法DESedeKeySpec.isParityAdjusted(byte[] key, int offset)检查奇偶校验是否设置正确。当然首先需要解码base 64字符串。

请注意,有时 3DES 密钥在没有正确设置奇偶校验的情况下分发。在您的情况下,您需要使用KeyFactory来生成密钥,否则可能无法设置奇偶校验。

检查密钥类型是否正确的另一种方法是使用这两种算法解密一些已知的明文/密文/秘密密钥对。

于 2013-05-30T12:44:56.883 回答