问题描述
- 在java中如何实现对数据进行3DES的ECB加密算法
-
要加密的数据为:5140000000080401AEBFFFFFFFF7FBFE
密钥为:
00000000000000000000000000000000
最后的结果为:
DBBE8A87A4E37D95B5EDDD2BE6A4151
F我的代码为:
//SecretKey负责对称密钥的保存 private SecretKey desKey; //完成加密和解密工作 private Cipher c; //保存加密结果 private byte[] cipherResultByte; private final static String Algorithm = "DESede/ECB/NoPadding";//加密方法/运算模式 private static DESedeKeySpec dks; private static SecretKeyFactory keyFactory; public DESeseTest02() { Security.addProvider(new com.sun.crypto.provider.SunJCE()); try { dks = new DESedeKeySpec("00000000000000000000000000000000".getBytes()); keyFactory = SecretKeyFactory.getInstance("DESede"); //生成密钥 desKey=keyFactory.generateSecret(dks); //生成Cipher对象,指定其支持DES算法 c=Cipher.getInstance(Algorithm); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } } public byte[] createEncryptor(byte[] b){ try { // System.out.println(str); //根据密钥,对Cipher进行初使化,DECRYPT_MODE加密模式 c.init(Cipher.ENCRYPT_MODE, desKey); // byte[] input=str.getBytes(); // System.out.println(input.length); //加密,将结果保存 cipherResultByte=c.doFinal(b); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return cipherResultByte; }
可加密出来的数据不对,大家帮忙给看看是怎么回事?谢谢大家
解决方案
把这行
"00000000000000000000000000000000".getBytes()
换成
new byte[34]
"0".getBytes()
这句和new byte[]{0}
这句不一样
解决方案二:
你密钥生成有问题,32个0的密钥,在内存里其实是16字节数据,所以你"0...0".getBytes().这句0的个数应该是16个,而不是32个。
时间: 2024-12-28 21:48:39