我如何能够确定密钥的加密(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;
答案 0 :(得分: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
生成密钥,否则可能无法设置奇偶校验。
另一种检查密钥是否正确类型的方法是使用两种算法解密一些已知的明文/密文/密钥对。