3DES将16位秘钥升级为24位

本文介绍如何将16位的3DES秘钥转换为符合规范的24位秘钥,包括直接复制和Base64转换两种方法,并提供了C#和Java的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#下TripleDES默认支持16位和24位的秘钥,而Java下的DESedeKeySpec就只支持24位,其实怎么说呢,按3DES规范要求,的确其秘钥应该是24位而不是16位的,但16位秘钥可以按 前8位+后8位+前8位 的规则来升级成24位的秘钥,所以我们只需要简单的通过数组的Copy就可以将16位秘钥升级为24位秘钥,下面是相应的代码,Java和C#可以说完全一样,C#16位秘钥加密的结果可以用C#(或Java)24位秘钥的来解密
        /// <summary>
        /// 尝试将16位的3DES秘钥升级成24位秘钥
        /// </summary>
        /// <param name="inputKey">16位秘钥</param>
        /// <param name="outputKey">24位秘钥,如果失败则返回null</param>
        /// <returns></returns>
        public static bool TryPromotion16To24(byte[] inputKey, out byte[] outputKey)
        {
            outputKey = null;
            if (inputKey != null && inputKey.Length == 16)
            {
                outputKey = new byte[24];
                Array.Copy(inputKey, 0, outputKey, 0, 16);
                Array.Copy(inputKey, 0, outputKey, 16, 8);
                return true;
            }
            return false;
        }


    /**
     * 将3DES的16位秘钥升级为24位秘钥
     * @param inputKey 16位秘钥
     * @return 24位秘钥
     * @throws IllegalArgumentException
     */
    static byte[] promotion16To24(byte[] inputKey)
            throws IllegalArgumentException {
        if (inputKey == null || inputKey.length != 16) {
            throw new IllegalArgumentException("input error");
        }
        byte[] outputKey = new byte[24];
        System.arraycopy(inputKey, 0, outputKey, 0, 16);
        System.arraycopy(inputKey, 0, outputKey, 16, 8);
        return outputKey;
    }

然而,上面只是常规做法,实际应用中还有一种方法,这种做法没碰过的还真想不出来,那就是将秘钥转为base64字符串,稍加注意就会发现16位的秘钥转为base64后,长度是24位,所以这时候只要将字符串简单粗暴的转为byte[]就是一个合法的3DES秘钥……
Encoding.UTF8.GetBytes(base64Str)

base64Str.getBytes("UTF-8")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值