2 changzhen1990 changzhen1990 于 2013.02.27 10:23 提问

在java中如何实现对数据进行3DES的ECB加密算法

要加密的数据为:5140000000080401AEBFFFFFFFF7FBFE

密钥为:00000000000000000000000000000000

最后的结果为:DBBE8A87A4E37D95B5EDDD2BE6A4151F

我的代码为:

//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;
    }

可加密出来的数据不对,大家帮忙给看看是怎么回事?谢谢大家

2个回答

relative660
relative660   2014.06.14 23:09

你密钥生成有问题,32个0的密钥,在内存里其实是16字节数据,所以你"0...0".getBytes().这句0的个数应该是16个,而不是32个。

ce_la_vie
ce_la_vie   2013.02.27 13:35

把这行

"00000000000000000000000000000000".getBytes() 

换成

new byte[34]

"0".getBytes()这句和new byte[]{0}这句不一样

Csdn user default icon
上传中...
上传图片
插入图片