概述
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位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复