3DES算法分享

首先认识一下3DES加密中(也是其他加密)主要涉及到的类
导入java中封装java算法的包:sunjce_provider.jar
注意通常导入这个包是会报编译错误,因此需要对myeclipse做如下配置
参考链接
http://jameszhao1987.iteye.com/blog/1468673
然后认识一下涉及的类
KeyGenerator类主要是用于生成密钥的(SecretKey 或是 Key)。
通过deskey = keygen.generateKey();但是这种是依靠类自己去创建密钥,而现实开发中都需要传入自己的私钥然后进行加密和解密。
因此这里选择的是使用
SecretKeyFactory类生成带有自定义私钥的Key类。
注意在使用前需要Security.addProvider(new SunJCE());即将加密包中的class注册到虚拟机当中。
通过SecretKeyFactory实例的generateSecret(KeySpec keySpec)来生产密钥。这里的keySpec我们传入DESedeKeySpec KeySpec = new DESedeKeySpec(input);input就是我们私钥对应的Hex.decode(KeyStr) (使用Hex需要使用bcprov-jdk14-116.jar)返回的数组.KeyStr就是我们的私钥字符串
SecretKeyFactory实例通过SecretKeyFactory.getInstance("DESede")获得。
得到密钥后就可以进行加密操作了,加密操作使用的是
Cipher类,
通过Cipher.getInstance(“DESede/CBC/PKCS5Padding”);获得cipher实例。
调用cipher.init(mode,secretKey,AlgorithmParameterSpec)进行初始化,之后就可以调用c.doFinal(input);来完成加密了。
mode是对应的加密和机密模式,对应的值为1和2,secretKey对应的是上面返回的密钥。
AlgorithmParameterSpec为对应的算法参数。如果为空jdk会默认生产一个对应值。
但是通常返回的是一个加密字符串,所以可以对doFinal方法返回的加密字节数组进行new String(Base64Encode(output), CodingType),即进行base64加密后转换成所需要的编码的字符串。
对加密字符串进行解密和上面比较相似,就是首先对机密串进行base64解密,然后获取密钥,将Cipher.init方法第一个参数设置成机密模式,最后对返回的解密字节数组进行new String(output, CodingType);字符串拼装。

然后讲一下密钥是如何获取的。密钥是长度是48的十六进制。所以获取时
使用下面的方法
StringBuffer key = new StringBuffer();
Random random = new Random();
for (int i = 0; i < 48; ++i) {
int cursor = Math.abs(random.nextInt()) % 16;
key.append(keyChars[cursor]);
}
return key.toString();
keyChars为0到F的字符数组。
即随机生成48个int数字。然后让生成的每个数字对16取余数。最后通过余数找到对应的16进制数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值