在上一篇博客中已经简要的介绍了MD5、BASE64、DES、RSA等算法在Java中的具体应用。现在可以考虑对这些代码封装成一个工具类EncryptUtil,然后再补充一下Commons Codec对BASE64的扩展支持!
<一>. EncryptUtil工具类:
1. 使用commons-logging记录异常日志。
2. 提取常量字段、公共字段。
3. 提取公共方法:
- //创建密钥
- createSecretKey(String key):Key
- //加密解密
- processCipher(byte[] processData, Key key, int opsMode, String algorithm):byte[]
4. EncryptUtil类的完整代码:
- /*
- * Copyright (c) 2014, Nick Xu, All rights reserved.
- */
- package com.excelsoft.common.crypto;
- import java.io.IOException;
- import java.security.Key;
- import java.security.KeyPair;
- import java.security.KeyPairGenerator;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.security.PrivateKey;
- import java.security.PublicKey;
- import java.security.SecureRandom;
- import java.security.Signature;
- import javax.crypto.Cipher;
- import javax.crypto.SecretKey;
- import javax.crypto.SecretKeyFactory;
- import javax.crypto.spec.DESKeySpec;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import sun.misc.BASE64Decoder;
- import sun.misc.BASE64Encoder;
- /**
- * 功能简述: 加密解密工具类,对MD5/BASE64/DES/RSA等算法提供了包装.
- * @author Nick Xu
- * @version 1.0
- */
- public class EncryptUtil {
- private static Log logger = LogFactory.getLog(EncryptUtil.class);
- private static final int KEY_SIZE = 1024;
- private static final String MD5_ALGORITHM= "md5";
- private static final String DES_ALGORITHM= "des";
- private static final String RSA_ALGORITHM= "rsa";
- private static final String SIGNATURE_ALGORITHM= "MD5withRSA";
- private static MessageDigest md5;
- private static BASE64Encoder encoder;
- private static BASE64Decoder decoder;
- private static SecureRandom random;
- private static KeyPair keyPair;
- private EncryptUtil() {
- }
- static {
- try {
- md5 = MessageDigest.getInstance(MD5_ALGORITHM);
- KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM);
- keyPairGenerator.initialize(KEY_SIZE);
- keyPair = keyPairGenerator.generateKeyPair();
- }
- catch (NoSuchAlgorithmException e) {
- // Exception handler
- logger.error(e);
- }
- encoder = new BASE64Encoder();
- decoder = new BASE64Decoder();
- random = new SecureRandom();
- }
- /**
- * 功能简述: 使用md5进行单向加密.
- */
- public static String encryptMD5(String plainText) {
- byte[] cipherData = md5.digest(plainText.getBytes());
- StringBuilder builder = new StringBuilder();
- for(byte cipher : cipherData) {
- String toHexStr = Integer.toHexString(cipher & 0xff);
- builder.append(toHexStr.length() == 1 ? "0" + toHexStr : toHexStr);
- }
- return builder.toString();
- }
- /**
- * 功能简述: 使用BASE64进行加密.
- * @param plainData 明文数据
- * @return 加密之后的文本内容
- */
- public static String encryptBASE64(byte[] plainData) {
- return encoder.encode(plainData);
- }
- /**
- * 功能简述: 使用BASE64进行解密.
- * @param cipherText 密文文本
- * @return 解密之后的数据
- */
- public static byte[] decryptBASE64(String cipherText) {
- byte[] plainData = null;
- try {
- plainData = decoder.decodeBuffer(cipherText);
- }
- catch (IOException e) {
- // Exception handler
- logger.error(e);
- }
- return plainData;
- }
- /**
- * 功能简述: 使用DES算法进行加密.
- * @param plainData 明文数据
- * @param key 加密密钥
- * @return
- */
- public static byte[] encryptDES(byte[] plainData, String key) {
- return processCipher(plainData, createSecretKey(key), Cipher.ENCRYPT_MODE, DES_ALGORITHM);
- }
- /**
- * 功能简述: 使用DES算法进行解密.
- * @param cipherData 密文数据
- * @param key 解密密钥
- * @return
- */
- public static byte[] decryptDES(byte[] cipherData, String key) {
- return processCipher(cipherData, createSecretKey(key), Cipher.DECRYPT_MODE, DES_ALGORITHM);
- }
- /**
- * 功能简述: 根据key创建密钥SecretKey.
- * @param key
- * @return
- */
- private static SecretKey createSecretKey(String key) {
- SecretKey secretKey = null;
- try {
- DESKeySpec keySpec = new DESKeySpec(key.getBytes());
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);
- secretKey = keyFactory.generateSecret(keySpec);
- }
- catch (Exception e) {
- // Exception handler
- logger.error(e);
- }
- return secretKey;
- }
- /**
- * 功能简述: 加密/解密处理流程.
- * @param processData 待处理的数据
- * @param key 提供的密钥
- * @param opsMode 工作模式
- * @param algorithm 使用的算法
- * @return
- */
- private static byte[] processCipher(byte[] processData, Key key, int opsMode, String algorithm) {
- try{
- Cipher cipher = Cipher.getInstance(algorithm);
- cipher.init(opsMode, key, random);
- return cipher.doFinal(processData);
- }
- catch (Exception e) {
- // Exception handler
- logger.error(e);
- }
- return null;
- }
- /**
- * 功能简述: 创建私钥,用于RSA非对称加密.
- * @return
- */
- public static PrivateKey createPrivateKey() {
- return keyPair.getPrivate();
- }
- /**
- * 功能简述: 创建公钥,用于RSA非对称加密.
- * @return
- */
- public static PublicKey createPublicKey() {
- return keyPair.getPublic();
- }
- /**
- * 功能简述: 使用RSA算法加密.
- * @param plainData 明文数据
- * @param key 密钥
- * @return
- */
- public static byte[] encryptRSA(byte[] plainData, Key key) {
- return processCipher(plainData, key, Cipher.ENCRYPT_MODE, RSA_ALGORITHM);
- }
- /**
- * 功能简述: 使用RSA算法解密.
- * @param cipherData 密文数据
- * @param key 密钥
- * @return
- */
- public static byte[] decryptRSA(byte[] cipherData, Key key) {
- return processCipher(cipherData, key, Cipher.DECRYPT_MODE, RSA_ALGORITHM);
- }
- /**
- * 功能简述: 使用私钥对加密数据创建数字签名.
- * @param cipherData 已经加密过的数据
- * @param privateKey 私钥
- * @return
- */
- public static byte[] createSignature(byte[] cipherData, PrivateKey privateKey) {
- try {
- Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
- signature.initSign(privateKey);
- signature.update(cipherData);
- return signature.sign();
- }
- catch (Exception e) {
- // Exception handler
- logger.error(e);
- }
- return null;
- }
- /**
- * 功能简述: 使用公钥对数字签名进行验证.
- * @param signData 数字签名
- * @param publicKey 公钥
- * @return
- */
- public static boolean verifySignature(byte[] cipherData, byte[] signData, PublicKey publicKey) {
- try {
- Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
- signature.initVerify(publicKey);
- signature.update(cipherData);
- return signature.verify(signData);
- }
- catch (Exception e) {
- // Exception handler
- logger.error(e);
- }
- return false;
- }
- }
<二>. Commons Codec对BASE64的扩展支持:
JDK提供了对BASE64的标准支持,每隔76个字符进行换行\r\n,并且包含+、=、/等特殊字符不适合作为url参数传递。因此通常都会使用Commons Codec来进行BASE64的加密和解密。下载commons-codec-1.8.jar并添加到lib下面,注意选择高版本,低版本有些方法不支持。
1. 是否换行:
- byte[] cipherData = Base64.encodeBase64(plainText.getBytes()); //默认不换行
- byte[] cipherData = Base64.encodeBase64(plainText.getBytes(), false); //取消换行
- byte[] cipherData = Base64.encodeBase64Chunked(plainText.getBytes()); //进行换行
- String cipherText = Base64.encodeBase64String(plainText.getBytes()); //转为字符串
2. 安全的url:转换+为-、/为_、将多余的=去掉
- byte[] cipherData = Base64.encodeBase64(plainText.getBytes(), false, true);
- byte[] cipherData = Base64.encodeBase64URLSafe(plainText.getBytes());
- String cipherText = Base64.encodeBase64URLSafeString(plainText.getBytes());
相关推荐
包括了Delphi AES DES MD5 RSA BASE64 2DES 3DES Blowfish CRC32-Static SHA等 常用的加密算法用法实例,比较不错的Delphi加密实例代码了,浅显易懂而且实用的常见加密算法实例,包括字符串和文件加密解密等。
MD5 单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 ...RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密函数 获取Hash描述表 RSA签名 RSA 签名验证
MD5算法,URLEncoding,Base64编码,AES,DES,DESede,RSA加密解密工具类和使用实例
RAS 能用于数据加密也能用于数字签名的算法。 DES加密,RAS 非对称算法加密,DES RAS 混合加密,公钥私钥算法,数字签名等等示例。
md5,aes,des,des3,rsa,sha,base64加密解密实例,含有所需jar包,注释详细,导入项目直接可用。
C#编写的加密解密小工具,可以对DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求。...使用方法可浏览博文《C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求》
MD2, MD5, SHA-1, HAVAL, Tiger, RIPE-MD160, MD5-MAC, HMAC, XOR-MAC, DES,IDEA, WAKE, 3-WAY, TEA, SAFER, Blowfish,SHARK, GOST, CAST-128, Square,Diamond2, Sapphire, RC2, RC5, RC6, MARS, SEAL, Luby-Rackoff...
可以攻玉1094.1 加固你的系统1094.2 加密组件Bouncy Castle 1114.3 辅助工具Commons Codec 1204.4 小结121第二部分实践篇第5章电子邮件传输算法—Base64 1345.1 Base64算法的由来1345.2 Base64算法的定义1345.3 Base...
自己写的非常强大的一个加密解密工具,有DES、3DES(含ECB和CBC)、RSA、SHA1、SHA256、SHA512、MD5、CRC、base64、异或运算等
可以攻玉109 4.1 加固你的系统109 4.2 加密组件Bouncy Castle 111 4.3 辅助工具Commons Codec 120 4.4 小结121 第二部分实践篇 第5章电子邮件传输算法—Base64 134 5.1 Base64算法的由来134 5.2 Base64算法的定义134...
包含Base64 包含对称加密算法:DES,3DEA,AES,PBE 包含对称加密算法:DH,RAS,ElGamal 包含摘要算法:MD2,MD4,MD5,SHA1,SHA2(SHA-224,SHA-256,SHA-384,SHA-512) 数字签名算法:RSA,DSA,ECDSA 详情请查看:...
Java 加解密技术,详细介绍常用算法:BASE64/MD5/SHA/HMAC/DES/3DES/AES/PBE/RSA/DH,25页内容,有代码
Vive.Crypto(Vive.Crypto对各种常用的加密算法进行封装,有 Base64、对称加密(DES、3DES、AES、SM4)、非对称加密(RSA、SM2)、Hash(MD4、MD5、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA...
•Android数据加密之Base64编码算法 •Android数据加密之SHA安全散列算法 DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究, 后来被...
VC 加密 解密 算法集(130个源码),比如simple、des、cryptlib、rsa、mqueue、cast、blowfish、xtrcrypt、gf256、base32,base64、modexppc、network等常见加密、解密算法,超过130个,大部分都是可以编译通过的,而且...
Dephi加解密源码大全【源码+实例】 2DES、3DES、3DES3、AES、BASE64、BLOWFISH、CRC、DES、MD5、RSA、SHA算法源码。Delphi的数据加密技术演示实例:文本加密解密源代码,随便在文本框中输入一段字符,可显示文本加密...
C#的类库,需要.net framework 4.0及以上,集成多种数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求
用,没有必要作类似于PGP、RSA 或DES 等复杂的加密算法。本实例介绍如何使用ROT13 算法加密和解密数 C#开发实战1200 例(第II卷) 832 据。实例运行效果如图19.3 所示。 图19.3 使用ROT13算法加密解密数据 关 键技术...
目前这个工具支持对称加密算法(AES、3DES)、非对称加密算法(RSA)、单向散列算法(MD5、SHA1、CRC32)、Base64算法等,后期还会不定时新增别的算法,在使用过程中如有问题欢迎邮件给我,我会及时优化和反馈。
基于Base64,MD5,SHA,Hmac,DES,AES,RSA信息加密的设计与实现。 实现Base64对于文字的加密和解密。 实现MD5对于文字的校验。 实现SHA1,SHA256,SHA384,SHA512对于文字的加密。 实现HmacMD5,HmacSHA1,HmacSHA256,...