要加密的数据为: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个。