try { String test = "123456789@fdj.com"; EncryptionDecryption des = new EncryptionDecryption("tourhb");// 自定义密钥 System.out.println("加密前的字符:" + test); System.out.println("加密后的字符:" + des.encrypt(test)); System.out.println("解密后的字符:" + des.decrypt(des.encrypt(test))); System.out.println("解密后的字符:" + des.decrypt("fe14c7c41f7d2a94b07d7928b21346e7")); } catch (Exception e) { e.printStackTrace(); } 下面是加密解密类的源码 import java.security.Key; import java.security.Security; import javax.crypto.Cipher; public class EncryptionDecryption { private static String strDefaultKey = "tourhb"; /** 加密工具 */ private Cipher encryptCipher = null; /** 解密工具 */ private Cipher decryptCipher = null; /** * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[] * hexStr2ByteArr(String strIn) 互为可逆的转换过程 * * @param arrB * 需要转换的byte数组 * @return 转换后的字符串 * @throws Exception * */ public static String byteArr2HexStr(byte[] arrB) throws Exception { int iLen = arrB.length; // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍 StringBuffer sb = new StringBuffer(iLen * 2); for (int i = 0; i < iLen; i++) { int intTmp = arrB[i]; // 把负数转换为正数 while (intTmp < 0) { intTmp = intTmp + 256; } // 小于0F的数需要在前面补0 if (intTmp < 16) { sb.append("0"); } sb.append(Integer.toString(intTmp, 16)); } return sb.toString(); } /** * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB) * 互为可逆的转换过程 * * @param strIn 需要转换的字符串 * @return 转换后的byte数组 * @throws Exception * */ public static byte[] hexStr2ByteArr(String strIn) throws Exception { byte[] arrB = strIn.getBytes(); int iLen = arrB.length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2 byte[] arrOut = new byte[iLen / 2]; for (int i = 0; i < iLen; i = i + 2) { String strTmp = new String(arrB, i, 2); arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16); } return arrOut; } /** * 默认构造方法,使用默认密钥 * * @throws Exception */ public EncryptionDecryption() throws Exception { this(strDefaultKey); } /** * 指定密钥构造方法 * * @param strKey * 指定的密钥 * @throws Exception */ public EncryptionDecryption(String strKey) throws Exception { Security.addProvider(new com.sun.crypto.provider.SunJCE()); Key key = getKey(strKey.getBytes()); encryptCipher = Cipher.getInstance("DES"); encryptCipher.init(Cipher.ENCRYPT_MODE, key); decryptCipher = Cipher.getInstance("DES"); decryptCipher.init(Cipher.DECRYPT_MODE, key); } /** * 加密字节数组 * * @param arrB * 需加密的字节数组 * @return 加密后的字节数组 * @throws Exception */ public byte[] encrypt(byte[] arrB) throws Exception { return encryptCipher.doFinal(arrB); } /** * 加密字符串 * * @param strIn * 需加密的字符串 * @return 加密后的字符串 * @throws Exception */ public String encrypt(String strIn) throws Exception { return byteArr2HexStr(encrypt(strIn.getBytes())); } /** * 解密字节数组 * * @param arrB * 需解密的字节数组 * @return 解密后的字节数组 * @throws Exception */ public byte[] decrypt(byte[] arrB) throws Exception { return decryptCipher.doFinal(arrB); } /** * 解密字符串 * * @param strIn * 需解密的字符串 * @return 解密后的字符串 * @throws Exception */ public String decrypt(String strIn) throws Exception { try { return new String(decrypt(hexStr2ByteArr(strIn))); } catch (Exception e) { return ""; } } /** * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位 * * @param arrBTmp * 构成该字符串的字节数组 * @return 生成的密钥 * @throws java.lang.Exception */ private Key getKey(byte[] arrBTmp) throws Exception { // 创建一个空的8位字节数组(默认值为0) byte[] arrB = new byte[8]; // 将原始字节数组转换为8位 for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { arrB[i] = arrBTmp[i]; } // 生成密钥 Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES"); return key; } }
开发者博客:www.developsearch.com
相关推荐
在Java编程语言中,加密和解密是网络安全和数据保护的重要组成部分。本教程"JAVA加密解密-3"聚焦于如何在Java环境中实现文件的加密和解密功能。以下是一些核心知识点: 1. **加密的基本概念**:加密是将明文数据...
java代码-java使用AES加密解密 AES-128-ECB加密 ——学习参考资料:仅用于个人学习使用
网上有很多SM4加密代码不太全,有些没JS,我从网上整理来后端java和前端JS的完整代码 SM4国密加密解密-后端JAVA-前端JS-完整代码
在Java编程环境中,创建一个能够加密和解密ZIP压缩包的项目是一项常见的需求,尤其是在处理敏感数据时。本文将深入探讨如何使用Java实现这一功能,同时也会提及与ActionScript 3(AS3)进行加密解密的相关知识。 ...
本示例通过Java实现了字符串的加密与解密功能,采用DES加密算法,提供了基本的加密解密功能及字符串与十六进制之间的转换。这种实现方式适用于简单的加密需求,但对于更复杂的安全场景,建议考虑使用更先进的加密...
Java加密解密工具是开发过程中不可或缺的部分,尤其是在处理敏感数据时,确保数据的安全性至关重要。在Java中,我们可以使用各种库和内置API来实现加密和解密操作。本篇文章将深入探讨Java加密解密的核心概念、常用...
Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...
keeloq 加密 解密-C程序 KEELOQ滚动码算法
标题"bcprov-jdk15on-1.47.jar Java 加密 解密 jar包"指的是一个Java加密解密库的jar文件,名为bcprov-jdk15on-1.47.jar。这个文件是用于在Java环境中执行加密和解密操作的,特别适用于那些基于Java 1.5或更高版本的...
java加密和解密的方法,利用指定的密钥,可逆的。密钥必须16位。
本文将详细介绍如何使用Java实现AES的加密和解密过程,特别是针对16位长度的秘钥,并解决加解密过程中可能出现的乱码问题。 首先,AES加密算法有多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block ...
CTF加密解密—CRYPTO—crypto9 压缩包题目 CTF加密解密—CRYPTO—crypto9 压缩包题目 CTF加密解密—CRYPTO—crypto9 压缩包题目 CTF加密解密—CRYPTO—crypto9 压缩包题目 CTF加密解密—CRYPTO—crypto9 压缩包题目 ...
在工作中会经常遇到密码加密,URL传参要进行加密,在此我参照一个例子将用java实现的AES加解密程序用实例写出。JS实现AES-GCM加密,java实现AES-GCM解密
Java作为一种广泛使用的编程语言,提供了丰富的工具和库来实现数据的加密和解密。本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不...
加密解密工程师必备加密与解密--软件保护技术与解决方案.chm加密与解密--软件保护技术与解决方案.chm加密与解密--软件保护技术与解决方案.chm加密与解密--软件保护技术与解决方案.chm
在iPhone平台上,使用C#进行AES加密和解密是常见的安全实践,尤其在开发iOS应用程序时,保护用户数据的安全至关重要。 AES的核心是块密码,它将明文数据分块处理,每个块通常为128位。加密过程通过一系列复杂的数学...
base64中文加密 注意中文编码为UTF-8
《JAVA加密和解密的艺术(第二版)》是一本深入探讨Java平台上的加密与解密技术的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实践示例,帮助读者理解和掌握加密技术在实际应用中的运用。其内容涵盖了从基本...
AES加密和解密-CryptoJS和Java AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,加密和解密使用相同的密钥 CryptoJS:https://github.com/brix/crypto-js