有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java AES256与3DES 256密钥检测

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

范例

MQAyAEgAOgA5ADUAMwA3AD8AQgBFAD4A--->;AES256键

g1EOWGFb+JJCZ7BBH2ERGTKUTDFXRNB--->;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;

共 (1) 个答案

  1. # 1 楼答案

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

    另一方面,AES可以与128位、192位和256位一起使用,所有这些位都可以使用

    现在base 64(不是SMIME,这是一个更高级别的协议)每个字符有6位(不排除末尾的伪位)。如果我检查一下你的钥匙,它们都是192位大小,所以这不能帮助你区分钥匙。您可以使用Apache编解码器库对基64字符串进行解码

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

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

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

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