永发信息网

java 3des双倍长 有参考的代码给提供下吗?

答案:1  悬赏:80  手机版
解决时间 2021-02-27 12:50
java 3des双倍长 有参考的代码给提供下吗?
最佳答案
虽然不知道你说的双倍长是什么意思,这是我自己用的3des工具类
密文是把byte数组转化成16进制字符串,一个byte对应两个数字,不知道是不是你说的双倍



public class DESede {

    
    private static final String Algorithm = "DESede"; 

    private static final char[] hex = "0123456789abcdef".toCharArray();

    public static final String keyStr = StringUtil.DeviceKey;

    
    private static byte[] key = strToBytes(keyStr);

    
    public static String encrypt(String src) {
        if(src == null){
            return null;
        }
        try {
            byte[] origin = src.getBytes("utf-8");
            return bytesToStr(des3Init(Cipher.ENCRYPT_MODE, origin));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    
    public static String decrypt(String cipher) {
        if(cipher == null){
            return null;
        }
        try {
            byte[] origin = des3Init(Cipher.DECRYPT_MODE, strToBytes(cipher));
            return new String(origin, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    
    private static byte[] des3Init(int mode, byte[] input) throws Exception{
        // 根据【给定的字节数组key】和【 指定算法DESede(3des)】构造一个密钥
        SecretKey secretKey = new SecretKeySpec(key, Algorithm);
        // 加解密
        Cipher cipher = Cipher.getInstance(Algorithm);
        cipher.init(mode, secretKey);
        return cipher.doFinal(input);
    }

    
    private static String bytesToStr(byte[] b){
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < b.length; i++) {
            s.append(hex[(b[i]>>>4)&0xf]);
            s.append(hex[b[i]&0xf]);
        }
        return s.toString();
    }

    
    private static byte[] strToBytes(String src){
        char[] c = src.toCharArray();
        byte[] b = new byte[c.length/2];
        for (int i = 0; i < b.length; i++) {
            b[i] = (byte)((Character.digit((int)c[2*i], 16)<<4) 
                        | Character.digit((int)c[2*i+1], 16));
        }
        return b;
    }

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我们常讲“善哉,善哉”,请问“善哉”是来自
发现肛门外有一小皮坠
ch1L基因是蓝细菌拟核DNA上控制叶绿素合成的
丹尼斯大石桥店南门这个地址在什么地方,我要
江苏省连云港市东海县牛山镇贯庄小学书法等级
还有没有类似《毛骗》的电视剧
移动农村无线宽带有没有50兆的
昨晚我梦见自已终于可以在人场中大声唱歌了,
郎溪县建平镇钟新村民委员会地址在什么地方,
手黄是什么原因
英语作文 介绍家人的,60个单词,初一!!!
怎么把一个EXE的程序打开修改里面的代码,然
三元水果店在哪里啊,我有事要去这个地方
春兰股份整体上市极高盛入主的可能性
汤鸿发地址有知道的么?有点事想过去
推荐资讯
上海万信酒店怎么样?
为什么坐飞机时有时耳朵非常容易响啊,咳下嗓
享乐主义的错误和危害性表现在B①把吃喝玩乐
烟台 牟平哪里有卖雪茄
进公司打打寒假工怎么签合同?
形容经历长期的艰苦生活和斗争!根据意思写成
青岛海底世界门票多少钱一张
()是上档键,主要用于辅助输入上档字符。
聚鑫源烤肉怎么去啊,有知道地址的么
英文单词 another和other 在用法上有什么不
好压是干什么用的
星动亚洲第三季有没有老成员
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?