我是靠谱客的博主 义气荔枝,最近开发中收集的这篇文章主要介绍3DES将16位秘钥升级为24位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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")

最后

以上就是义气荔枝为你收集整理的3DES将16位秘钥升级为24位的全部内容,希望文章能够帮你解决3DES将16位秘钥升级为24位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部