问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-24 16:57

我来回答

1个回答

热心网友 时间:2023-10-24 05:19

虽然不知道你说的双倍长是什么意思,这是我自己用的3des工具类

密文是把byte数组转化成16进制字符串,一个byte对应两个数字,不知道是不是你说的双倍


/**
 * DESede(3DES)加解密整理--pangjs 2013.12.04
 */
public class DESede {
    
    /** 定义加密算法。 可用 DES,DESede,Blowfish*/
    private static final String Algorithm = "DESede"; 
    
    private static final char[] hex = "0123456789abcdef".toCharArray();
    
    public static final String keyStr = StringUtil.DeviceKey;
    
    /**必须是24位*/
    private static byte[] key = strToBytes(keyStr);
    
    /**
     * 加密,参数有问题返回null
     * @param src 明文
     * @return 16进制字符串密文
     */
    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;
        }
    }
    
    /**
     * 解密,参数有问题返回null
     * @param cipher (16进制字符串密文)
     * @return 明文
     */
    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;
        }
    }
    
    /**
     * 3des加解密
     * @param mode Cipher.ENCRYPT_MODE | Cipher.DECRYPT_MODE
     * @param input byte[]
     * @return byte[]
     * @throws Exception NoSuchAlgorithm,InvalidKey,NoSuchPadding,BadPadding,IllegalBlockSize
     */
    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);
    }

    /**
     * byte数组转换为16进制字符串
     * @param b [1, 33, 79, 88, -120]
     * @return "01214f5888"
     */
    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();
    }
    
    /**
     * 16进制字符串转换为相应的byte数组
     * @param src "81214f5888"
     * @return [-127, 33, 79, 88, -120]
     */
    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;
    }

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在excel中输入产品序号如何直接引出相应的信息 excel表格输序号自动出现内容 戏剧教育主要学什么内容 戏剧教育专业就业前景和就业方向怎么样 戏剧教育专业学什么 2025就业前景怎么样 戏剧教育学什么 戏剧教育专业是本科还是专科 戏剧教育专业要读多少年 戏剧教育是什么专业 贵州省合医在浙江省能直接报销吗 直肠变大,大家都怎么治疗的? 卫士通加密机怎么样实现3des加解密 直肠变大,怎么变回去呀? 如何使用3des加密方式得到只含数字和字母的加密字符串(C#) ios 3des加密 32位key怎么使用 3des加密算法是标准的吗 3DES的加密过程 如何用Java进行3DES加密解 ICBC-ATMC加密模式设置工具? 拨号上网电脑为什么总掉线 什么是3DES对称加密算法? 单位网络经常掉线,是什么问题? 3DES 加密解密 为何办公室网络时断时续??解决再加100分 我用3DES加密后怎么样才能得到16位的密文 办公室电脑总是断网 需重连 如何使用3des算法 加密文档 如何用Java进行3DES加密解密 办公楼内大概100多台电脑,但是网络非常不稳定,有的办公室能上,但有的办公室总是掉线,是什么原因怎么办 3des加密 密钥 直肠粗大,怎么治疗呀? C#3des加密时候需要密钥 直肠变大了,怎么变回去呀? 直肠炎,直肠粗大,怎么做手术治疗呀? 电脑的文件侠是怎样加密的,不用加密工具??? 恒天然安满怎么样? 安满益生菌和恒天然集团有什么关系呢? 人的直肠的长度大概为多少厘米? 各位觉得安满和美素佳儿奶粉哪个更好? 人的直肠的长度大概为多少厘米 安满婴儿奶粉怎样,是大品牌吗? 结肠癌和直肠癌统称为“大肠癌”,它们的早期症状有哪些? 安满的奶源地介绍 直肠癌早期和大肠癌拉的便血,是不是无论是干大便还是普通大便,都有血? 安满的销售渠道 大肠癌分为结肠癌与直肠癌两种为什么? 请问安满客服电话是多少? 大肠癌与结肠直肠癌是一回事吗? 安满孕妇奶粉几个月喝合适 大肠癌和直肠癌做腹部彩超能看出来吗