我有一个问题,我一直试图解决过去三天。我必须使用DES来加密字节数组以获得特定结果。但是,Java中的DES的默认实现(Javax.crypto.cipher,JDK 7,提供者SunJCE版本1.7)似乎不起作用。 当我有以下代码:Java密码DES怪异结果
private void testDES() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
byte[] keyByte = convertStringToBytes("00 00 00 00 00 00 00 00");
byte[] data = convertStringToBytes("00 00 00 00 00 00 00 00");
Key key = new SecretKeySpec(keyByte, "DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
System.out.println(hexadecimalString(cipher.doFinal(data)));
}
它打印F4 DA 4D 97 BF CF 23 D9而不是正确结果的图8C A6 4D E9 C1 B1 23 A7(根据测试向量:http://common-lisp.net/project/clbuild/mirror/ironclad/test-vectors/des.testvec) 的方法hexadecimalString和convertStringToBytes只是将字节转换为hexa,反之亦然。 任何人都可以帮我吗?经过了相当长的时间,我只是不知道该怎么做。提前致谢。乔
也许这些方法只是做了错误的?为什么不直接使用字节:'new byte [] {0,0,0,0,0,0,0,0}'? –