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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java 3des加密算法ECB模式
Java 3des加密算法ECB模式,亲测完美通过。目前网上的大部分算法都通不过或者加进Base64之类的,还要不下载其它jar包。而代码使用时直接下载运行,无须配置和下载额外的jar包 ,只需换上自己的密钥和待加密的数据即可。
Java 3DES ECB NoPadding
在搞银联POS机的东东,略感头疼,搞了N久,还是终端-Hulk 给的方法解决了3DES加密解密的难题。 import java.security.Key; import java.security.spec.KeySpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.Secret
android java 3des加密 ECB/CBC
import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import android.util.Base6
3des加密(双倍长)(ECB,CBC)详细介绍
网上查了下关于ECB和CBC加密,只有一些图文介绍,没有详细步骤,现在在这里记录一下自己的使用过程。 参考资料:http://blog.csdn.net/aaaaatiger/article/details/2525561 需要详细了解的朋友请自行查找其它资料,我只在这里介绍一下中间加密器的过程,以16字节密钥为例。 一、DES加密和解密 /** * DES加密 *
php中实现3DES算法(ECB加密模式PKCS5Padding填充)
讲道理,一提到3DES算法,首先想到的是要和java做交互了== 现在3DES已经渐渐被抛弃了,尤其是ECB加密模式使用的更少了,但是没办法,业务需要,合作方用的是他,你头再铁也不能怎样,那就扒扒文档咯 网上完整的php实现以经不多了,CBC加密模式居多,所以我参考了好几篇文章,整理了一个class出来,共享上来,避免后来人踩坑 感谢前人的整理总结: PHP版3DES加解密类更新成
3DES、DES的CBC、ECB
这一篇文章要解决数据加密——数据补位的问题、DES算法的两种模式ECB和CBC问题以及更加安全的算法——3DES算法。 一、数据补位 DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节(通常补00或者FF,根据实际要求不同)进行计算,之后按照顺序将计算所得的数据连在一起即可。 这里有个问题就是为什么要进行数据
openssl c++ 3des ecb 加密
openssl 3des ecb 加密,其中的补全方式为 PKCS5Padding
objective-c java C# 3DES ECB 加密
转载自:  http://blog.sina.com.cn/s/blog_675e65880102v0e0.html 你这么屌,你家里人知道不? 原文地址: java  C# 3DES ECB 加密" style="text-decoration:none; color:rgb(152,61,158)">objective-c  java  C# 3DES ECB 加密作者:小穆 搞了3
3DES加密报文 (使用DESede/ECB/PKCS5Padding组合模式补位)
遇到一个接口请求要 RSA MD5 3Des Base64进行联合加密的.....尼玛这保密要求好高啊....3DES是一种对称加密方式,就是用同一密钥进行加密和解密需要准备什么1.所以需要一个通信双方都知道的密钥(24个字节)            单des密钥是8字节,三重des密钥就是3*8=24字节。2.一段明文... public void test_3des() throws Exce...
node和Java实现3des加密解密
//若使用以下三行代码工厂方式转换秘钥,注意,key的长度超过24的话生成的myMykeySpec对象 为key自动截取的前24位 // KeySpec myKeySpec = new DESedeKeySpec(key); // SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede"); // SecretKey secretKey = mySecretKeyFactory