在使用Cipher类最加密的时候,如果需要大量进行加解密工作,需要避免Cipher类的大量实例化,本文用MAP记录已经实例化的Cipher,如果已经存在则不需要在实例化、避免内存浪费、导致 Cipher not initialized 错误。
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="));
}
}
分享到:
相关推荐
Cipher加密解密
在`keywordcipher_Encryption`和`keywordcipher_Decryption`函数中,我们分别实现了基于关键词的加密和解密过程,通过对明文或密文字符与替代表进行对应操作,实现信息的隐藏和恢复。 Permutation Cipher,又称为...
Delphi 开发的AES 等对称加密解密控件 1.AES算法 AES-128-CBC、AES-192-CBC、AES-256-CBC; AES-128-CFB、AES-192-CFB、AES-256-CFB; AES-128-CFB1、AES-192-CFB1、AES-256-CFB1; AES-128-CFB8、AES-192-CFB8、...
Cipher类在Java Cryptography Architecture (JCA)中扮演了核心角色,它提供了各种加密和解密算法的实现,包括对称加密、非对称加密以及消息认证码(MAC)。在这个Java实现的加密解密工具类中,我们很可能会看到以下...
为了解决这个问题,我们可以利用各种加密技术来保护我们的敏感信息,比如创建自己的简单字符加密解密工具。这样的工具能够将密码等重要数据转换成看似随机的字符串,确保即使信息被他人获取,也无法轻易解读。 加密...
### 字符串加密解密——DES加密解密详解 #### 一、概述 在现代信息技术领域,数据安全显得尤为重要。为了保护数据不被未授权访问或窃取,加密技术成为了必不可少的一部分。其中,**DES(Data Encryption Standard...
本篇主要介绍如何使用Java生成RSA密钥对,进行数据的加密与解密,以及如何处理超长字符的分区问题。 RSA是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。公钥用于加密,而私钥用于解密。这种机制使得只有...
MyBatis-Cipher 是一款基于 Java 语言开发的数据库敏感信息加密解密方案,专为 MyBatis 设计。它能够在数据进出数据库(DB)的过程中自动对敏感信息进行脱敏处理,极大提高了数据安全性,同时避免了开发者手动实现...
这个特定的压缩包文件“OJ_字符串加解密”似乎与在OJ平台上解决字符串加解密问题有关。从标签我们可以推断,这个问题可能涉及到C语言,并且可能包含加密和解密字符串的方法。 字符串加解密是信息安全和数据处理中的...
综上所述,CIPHER加密解密算法涉及的范围广泛,从基础的对称和非对称加密到复杂的数字签名和网络安全协议,都是确保数据安全的重要工具。在实际应用中,理解并正确使用这些技术对于保护信息安全至关重要。
在IT领域,字符串的加密和解密操作是信息安全和数据保护的重要组成部分。字符串,作为计算机程序中最基础的数据类型之一,经常需要被加密以确保敏感信息的安全性,防止未经授权的访问和泄露。本篇将深入探讨字符串...
2. **解密**:对于密文中的每一个字符C和密钥K中的对应字符,计算出的明文P为P=(C-K+26)%26。这里同样使用了模26运算来处理负数结果。 在给定的代码片段中,`encrypt_vigenere`函数实现了加密过程,而`decrypt_...
本示例通过Java实现了字符串的加密与解密功能,采用DES加密算法,提供了基本的加密解密功能及字符串与十六进制之间的转换。这种实现方式适用于简单的加密需求,但对于更复杂的安全场景,建议考虑使用更先进的加密...
des加解密算法,可加解密文件,及内存 非常好用。
Cipher类提供了加密和解密的方法,例如doFinal()方法和update()方法。例如,在上面的代码中,我们使用Cipher类来实现加密和解密。 知识点6:密钥文件的生成 在RSA加密解密算法中,密钥文件的生成是非常重要的一步...
在本文中,我们将深入探讨如何使用Visual C++(VC++)来实现AES(Advanced Encryption Standard)加解密算法。AES是一种广泛使用的对称加密标准,它提供了强大的数据保护能力,适用于各种应用程序,如文件存储、网络...
接着,创建Cipher对象,初始化为加密或解密模式,并使用密钥。最后,调用`doFinal()`方法处理数据。 3. **JavaScript实现DES加密解密**: JavaScript中没有内置的DES库,通常需要依赖第三方库,如`crypto-js`。这...
恺撒加密的python实现,CTF必备,小游戏很好,恺撒加解密(Caesar cipher)——python脚本实现
目前这个工具支持对称加密算法(AES、3DES)、非对称加密算法(RSA)、单向散列算法(MD5、SHA1、CRC32)、Base64算法等,后期还会不定时新增别的算法,在使用过程中如有问题欢迎邮件给我,我会及时优化和反馈。