我将如何确定密钥(AES256或3DES 256)的加密...因为两个密钥都是32个字符(每个字符8位* 32个字符)= 256位并且由Mime编码。
例
MQAyAEgAOgA5ADUAMwA3AD8AQgBFAD4A ---> AES256键
g1EOWGFb + JjCZ7BbH2RergtKUtDfXrNb ---> 3DES键
AES密钥是在Openssl中制作的,而3DES密钥是使用Java和以下Apis制作的。
javax.crypto.Cipher;
javax.crypto.KeyGenerator;
javax.crypto.SecretKey;
javax.crypto.SecretKeyFactory;
javax.crypto.spec.DESedeKeySpec;
javax.crypto.spec.IvParameterSpec;
最佳答案
首先,没有3DES 256这样的东西。3DES的密钥大小为128或192位,其中有效使用了112位和168位。请注意,3DES的安全裕度甚至更低。
另一方面,AES可以与128、192和256位一起使用,所有这些都可以使用。
现在base 64(不是SMIME,这是一个更高级别的协议)每个字符有6位(不排除末尾的虚假位)。如果我检查您的密钥,它们的大小均为192位,那么这将无法帮助您区分密钥。您可以使用Apache Codec库解码基本64个字符串。
但是,您的3DES密钥(第二个密钥)似乎为3个单个DES密钥使用奇偶校验字节。这可以用来区分键。请注意,这并非万无一失,随机生成的AES密钥可能只是偶然地正确设置了奇偶校验位。但是,发生这种情况的可能性大约在2^24
左右。
可以使用方法DESedeKeySpec.isParityAdjusted(byte[] key, int offset)
检查是否正确设置了奇偶校验。当然,首先需要解码基数为64的字符串。
请注意,有时会在未正确设置奇偶校验的情况下分发3DES密钥。在您的情况下,您需要使用KeyFactory
生成密钥,否则可能无法设置奇偶校验。
检查密钥是否为正确类型的另一种方法是使用这两种算法解密一些已知的明文/密文/秘密密钥对。