书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
目录 / 分类
数据库基础
数据库原理
SQL语言
网络原理
DB4O
Access
基础知识
驱动及连接
试题参考
技术手册
应用案例
常见问题
SQLServer
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
MySQL
基础知识
驱动连接
管理工具
技术手册
应用案例
常见问题
SQLite
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
Oracle
基础知识
驱动连接
管理工具
技术手册
应用案例
常见问题
PostgreSQL
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
移动应用
JavaME
Android
微信开发
经验分享
Java组件
Java开发
应用办公
常见问题解决
Delphi
硬件故障解决
WEB
HTML5
Javascript
速查表
文件同步
服务器配置
Apache
Tomcat
Resin
协议&概念
IIS&ASP
win&linux
Absolute Database
nginx
OpenFire
Redis
freeswitch
网文摘录
IT杂谈
网文转载
行业新闻
热点推荐
下载中心
软件下载
CUBRID数据库
介绍及使用
验证/二维/条形码
验证码原理及实现
二维码相关
条形码相关
在线二维码生成
在线条形码生成
当前位置:
首页
>
经验分享
>
Java开发
大批量字符加解密时报 Cipher not initialized
在使用Cipher类最加密的时候,如果需要大量进行加解密工作,需要避免Cipher类的大量实例化,本文用MAP记录已经实例化的Cipher,如果已经存在则不需要在实例化、避免内存浪费、导致 Cipher not initialized 错误。
Java代码
import
java.io.IOException;
import
java.io.UnsupportedEncodingException;
import
java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException;
import
java.security.spec.InvalidKeySpecException;
import
java.util.HashMap;
import
javax.crypto.Cipher;
import
javax.crypto.NoSuchPaddingException;
import
javax.crypto.SecretKey;
import
sun.misc.BASE64Decoder;
/**
* 解密
*/
public
class
DESTool {
private
static
String Algorithm =
"DESede"
;
// 加密算法的名称
private
static
Cipher c;
// 密码器
//private static byte[] cipherByte;
private
static
SecretKey deskey;
// 密钥
private
static
String keyString =
"XXXXXXXXXXXXXXXXXXXXXXXXX"
;
// 获得密钥的参数
private
static
HashMap decryptCipherMap=
new
HashMap();
// Logger log =Logger.getLogger(DESTool.class);
// 对base64编码的string解码成byte数组
public
byte
[] deBase64(String parm)
throws
IOException {
BASE64Decoder dec =
new
BASE64Decoder();
byte
[] dnParm = dec.decodeBuffer(parm);
//System.out.println(dnParm.length);
//System.out.println(dnParm);
return
dnParm;
}
// 把密钥参数转为byte数组
public
byte
[] dBase64(String parm)
throws
IOException {
BASE64Decoder dec =
new
BASE64Decoder();
byte
[] dnParm = dec.decodeBuffer(parm);
return
dnParm;
}
/**
* 对 Byte 数组进行解密
*
* @param buff
* 要解密的数据
* @return 返回加密后的 String
*/
public
static
String createDecryptor(
byte
[] buff)
throws
NoSuchPaddingException, NoSuchAlgorithmException,
UnsupportedEncodingException {
byte
[] cipherByte = buff ;
try
{
cipherByte = c.doFinal(buff);
}
catch
(javax.crypto.BadPaddingException ex) {
ex.printStackTrace();
return
null
;
}
catch
(javax.crypto.IllegalBlockSizeException ex) {
ex.printStackTrace();
return
null
;
}
return
(
new
String(cipherByte,
"UTF-8"
));
}
public
void
init(String key)
throws
IOException, InvalidKeyException,
InvalidKeySpecException {
byte
[] dKey = dBase64(key);
try
{
if
(decryptCipherMap.get(
"keyString"
)==
null
){
//判断是否已经存在实例,如果存在不在实例化。
deskey =
new
javax.crypto.spec.SecretKeySpec(dKey, Algorithm);
c = Cipher.getInstance(Algorithm);
c.init(Cipher.DECRYPT_MODE, deskey);
// 初始化密码器,用密钥deskey,进入解密模式
decryptCipherMap.put(
"keyString"
, c);
}
}
catch
(NoSuchPaddingException ex) {
}
catch
(NoSuchAlgorithmException ex) {
}
}
/**
*
* @param strEncryption 加密字符串
* @return 返回解密后的字符串
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeySpecException
* @throws InvalidKeyException
* @throws IOException
*/
public
static
String decryptScore(String strEncryption)
throws
IOException,
NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeySpecException, InvalidKeyException, IOException{
DESTool des =
new
DESTool();
des.init(keyString);
byte
[] dBy = des.deBase64(strEncryption);
return
des.createDecryptor(dBy);
}
public
static
void
main(String args[])
throws
IOException,
NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeySpecException, InvalidKeyException, IOException {
DESTool des =
new
DESTool();
des.init(keyString);
//byte[] dBy = des.deBase64("1ZVasdJJco1qccDnnfQfb8QeaARxhkR6");
byte
[] dBy = des.deBase64(
"JdTkEPNsw8E="
);
String dStr = des.createDecryptor(dBy);
System.out.println(
"解:"
+ decryptScore(
"JdTkEPNsw8E="
));
}
}
上一篇:java7.0(java1.7)之jdk和jre的安装问题
下一篇:Java之Serializable序列化有什么作用?
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by
DEVSOARTECH
豫ICP备11002312号-2
豫公网安备 41010502002439号