JAVA 3DES加密/解密
来源:互联网 发布:java 国家精品课程 编辑:程序博客网 时间:2024/05/02 16:19
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
package com.qk365.utils;import java.security.MessageDigest;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;@SuppressWarnings("restriction")public class EncryptUtils {private static final String Algorithm = "DESede"; // 定义加密算法,可用,DES,DESede,Blowfish/** * 3des解码 * * @param value * 待解密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */public static String Decrypt3DES(String value, String key) throws Exception {byte[] b = decryptMode(GetKeyBytes(key), Base64.decode(value));return new String(b);}/** * 3des加密 * * @param value * 待加密字符串 * @param key * 原始密钥字符串 * @return * @throws Exception */public static String Encrypt3DES(String value, String key) throws Exception {return byte2Base64(encryptMode(GetKeyBytes(key), value.getBytes()));}/** * 计算24位长的密码byte值,首先对原始密钥做MD5算hash值,再用前8位数据对应补全后8位 * * @param strKey * 密钥 * @return * @throws Exception */public static byte[] GetKeyBytes(String strKey) throws Exception {if (null == strKey || strKey.length() < 1)throw new Exception("key is null or empty!");MessageDigest alg = MessageDigest.getInstance("MD5");alg.update(strKey.getBytes());byte[] bkey = alg.digest();int start = bkey.length;byte[] bkey24 = new byte[24];for (int i = 0; i < start; i++) {bkey24[i] = bkey[i];}for (int i = start; i < 24; i++) {// 为了与.net16位key兼容bkey24[i] = bkey[i - start];}return bkey24;}/** * 加密 * * @param keybyte为加密密钥 * ,长度为24字节 * @param src * 为被加密的数据缓冲区(源) * @return */public static byte[] encryptMode(byte[] keybyte, byte[] src) {try {// 生成密钥SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密Cipher c1 = Cipher.getInstance(Algorithm);c1.init(Cipher.ENCRYPT_MODE, deskey);return c1.doFinal(src);} catch (java.security.NoSuchAlgorithmException e1) {e1.printStackTrace();} catch (javax.crypto.NoSuchPaddingException e2) {e2.printStackTrace();} catch (java.lang.Exception e3) {e3.printStackTrace();}return null;}/** * 解密 * * @param keybyte * 解密密钥,长度为24字节 * @param src * 解密后的缓冲区 * @return */public static byte[] decryptMode(byte[] keybyte, byte[] src) {try {// 生成密钥SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);// 解密Cipher c1 = Cipher.getInstance(Algorithm);c1.init(Cipher.DECRYPT_MODE, deskey);return c1.doFinal(src);} catch (java.security.NoSuchAlgorithmException e1) {e1.printStackTrace();} catch (javax.crypto.NoSuchPaddingException e2) {e2.printStackTrace();} catch (java.lang.Exception e3) {e3.printStackTrace();}return null;}/** * 转换成base64编码 */public static String byte2Base64(byte[] b) {return Base64.encode(b);}/** * 转换成十六进制字符串 */public static String byte2hex(byte[] b) {String hs = "";String stmp = "";for (int n = 0; n < b.length; n++) {stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));if (stmp.length() == 1)hs = hs + "0" + stmp;elsehs = hs + stmp;if (n < b.length - 1)hs = hs + ":";}return hs.toUpperCase();}/** * 3DEC 加密解密测试 */public static void main(String[] args) throws Exception {String key = "jklasfjlksdghsdsad";String password = "123456";System.out.println("调用原始密钥算加密结果:" + EncryptUtils.Encrypt3DES(password, key));String str = "8198h9Ejibg=";System.out.println("调用原始密钥算解密结果:" + EncryptUtils.Decrypt3DES(str, key));}}
0 0
- java 3DES加密解密
- java 3DES加密、解密
- JAVA 3DES加密解密
- JAVA 3DES加密/解密
- java--des加密解密
- java DES加密解密
- java DES加密解密
- java DES加密解密
- Java DES加密解密
- Java DES 加密解密
- java DES加密解密
- java DES加密解密
- JAVA DES加密解密
- JAVA DES加密解密
- java des加密解密
- DES/3DES加密,解密
- JAVA和C# 3DES加密解密
- java的3DES加密/解密
- java集合框架总结(五)
- git入门-----初步认识
- java集合框架总结(六)
- java集合框架总结(七)
- 基本数据类型和引用数据类型
- JAVA 3DES加密/解密
- Swagger与SpringMVC项目整合
- Google Gson的使用方法及JSON 技术对比
- JAVA性能优化:35个小细节让你提升java代码的运行效率
- C++之函数指针
- MyBatis Eclipse插件安装
- redis教程(一)之redis简介
- redis教程(二)之VMvare安装
- redis教程(三)之redis安装