做需求时对面给了一个32位的passwd,直接用
SecretKeySpec securekey=new SecretKeySpec(passwd.getBytes(),"DESede");
报错:java.security.InvalidKeyException: Invalid key length: 32 bytes
用
DESedeKeySpec dks = new DESedeKeySpec(passwd.getBytes(),"1"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey securekey = keyFactory.generateSecret(dks);
程序不报错,但加密的结果不一样。
问了后知道先将passw进行64位转码
BASE64Decoder base64decoder = new BASE64Decoder(); byte[] passwdByte = base64decoder.decodeBuffer(passwd);
再
SecretKeySpec securekey=new SecretKeySpec(passwdByte,"DESede");
这样既不会报错。加密的结果也一样了