如何确定密钥(AES256或3DES 256)的加密两个密钥都是32个字符(每个字符8位* 32个字符)=256位...Since 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;发布于 2013-05-30 20:44:57
首先,不存在3DES 256这样的东西。3DES具有128或192比特的密钥大小,其中112比特和168比特被有效利用。请注意,3DES的安全边际甚至更低。
另一方面,AES可以与128、192和256位一起使用,所有这些位都被使用。
现在base64(不是SMIME,这是一个更高级别的协议)每个字符有6位(不排除末尾的伪位)。如果我检查你的密钥,它们的大小都是192位,所以这不能帮助你区分密钥。您可以使用Apache Codec库来解码base64字符串。
然而,您的3DES密钥-第二个密钥-似乎使用奇数奇偶校验字节作为3个单独的DES密钥。可以用来区分密钥的。请注意,这并不是万无一失的,随机生成的 AES可能仅凭机会就正确地设置了奇偶校验位。然而,这种情况发生的可能性约为2^24的水平。
可以使用方法DESedeKeySpec.isParityAdjusted(byte[] key, int offset)检查是否正确设置了奇偶校验。当然,首先需要对base64字符串进行解码。
请注意,有时在未正确设置奇偶校验的情况下分发3DES密钥。在您的示例中,您需要使用KeyFactory来生成密钥,否则可能无法设置奇偶校验。
检查密钥是否为正确类型的另一种方法是使用这两种算法来解密一些已知的明文/密文/密钥对。
https://stackoverflow.com/questions/16823107
复制相似问题