解决Cipher获取实例为空问题

最近维护的项目中3Des加密突然报空指针,记录下修复此次问题历程。

先看报错

跟进代码,如下: 

	static {
	        try {
	            key_ = new SecretKeySpec(keys, "TripleDES");
	            ciperEnc = Cipher.getInstance("TRIPLEDES/ecb/NoPadding");
	            ciperEnc.init(Cipher.ENCRYPT_MODE, key_);
	            ciperDec = Cipher.getInstance("TRIPLEDES/ecb/NoPadding");
	            ciperDec.init(Cipher.DECRYPT_MODE, key_);
	        } catch (Exception e) {
	        	LOGGER.error(e.getMessage(), e);
	            //e.printStackTrace();
	        }
	 }

发现是Cipher在获取3DES实例时失败,为null,百思不得其解,原本正常的代码突然报错了,百度一会后没找到答案,回归问题本身,翻阅下java文档(Java Platform SE 8),在里面找到答案。

1.选择所在的javax.crypto

 2.查看Cipher,发现代码里的transformation不在标准transformation中,查看Cipher section

3. 发现java的3DES是使用 DESede

4.修改代码

	static {
		try {
			key_ = new SecretKeySpec(keys, "DESede");
			ciperEnc = Cipher.getInstance("DESede/ecb/NoPadding");
			ciperEnc.init(Cipher.ENCRYPT_MODE, key_);
			ciperDec = Cipher.getInstance("DESede/ecb/NoPadding");
			ciperDec.init(Cipher.DECRYPT_MODE, key_);
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
			//e.printStackTrace();
		}
	}

5.重新编译启动,问题解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snamc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值