给一个简单的加密类,使用方便快捷。当然加密的key非常规律,如果想改可以修改key变为复杂的key。
撸代码先:首先由一个加密类DES.class
需要导入的类如下:
import java.nio.charset.Charset; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec;
类及方法:
public class DES { //中文也是可以加密的,所以规定解密后的字符编码为UTF-8. private static String DEFAULT_CHARSET = "UTF-8"; /** * * @Title: encript * @Description: DES加密 * @param @param org * @return byte[] 返回类型 * @throws */ public String encript(String org) { byte[] destBytes = null; byte[] orgBytes = org.getBytes(Charset.forName(DEFAULT_CHARSET)); try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(this.getKey()); SecretKeyFactory keyFactory; keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher ciper = Cipher.getInstance("DES/CBC/NOPadding"); Cipher ciper = Cipher.getInstance("DES"); // ciper.init(Cipher.ENCRYPT_MODE, securekey, new // IvParameterSpec(this // .getIV())); ciper.init(Cipher.ENCRYPT_MODE, securekey, sr); destBytes = ciper.doFinal(orgBytes); } catch(Exception e) { e.printStackTrace(); } String dest = bytesToHexString(destBytes); return dest; } /** * * @Title: decript * @Description: DES解密 * @param @param org * @return String 返回类型 * @throws */ public String decript(String org) { byte[] destBytes = null; byte[] orgBytes = hexStringToBytes(org); try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(this.getKey()); SecretKeyFactory keyFactory; keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher ciper = Cipher.getInstance("DES/CBC/NOPadding"); Cipher ciper = Cipher.getInstance("DES"); // ciper.init(Cipher.ENCRYPT_MODE, securekey, new // IvParameterSpec(this // .getIV())); ciper.init(Cipher.DECRYPT_MODE, securekey, sr); destBytes = ciper.doFinal(orgBytes); } catch(Exception e) { e.printStackTrace(); } String dest = new String(destBytes, Charset.forName(DEFAULT_CHARSET)); return dest; } /** * * @Title: getKey * @Description: 获取密钥(16位) * @return byte[] 返回类型 * @throws */ private byte[] getKey() { // 固定密钥 String key = "12345678abcdefgh"; return key.getBytes(Charset.forName(DEFAULT_CHARSET)); } /** * * @Title: getIV * @Description: 获取初始向量(8位),取key的前8位,不足补0 * @return byte[] 返回类型 * @throws */ public byte[] getIV() { byte[] key = this.getKey(); byte[] iv = new byte[8]; System.arraycopy(key, 0, iv, 0, 8); System.out.println("iv :" + iv); return iv; } /** * * @Title: bytesToHexString * @Description: byte[]转十六进制字符串 * @param @param src * @return String 返回类型 * @throws */ public String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * * @Title: hexStringToBytes * @Description: 十六进制字符串转byte[] * @param @param hexString * @return byte[] 返回类型 * @throws */ public byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] dest = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; dest[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return dest; } /** * * @Title: charToByte * @Description: char转byte * @param @param c * @return byte 返回类型 * @throws */ private byte charToByte(char c) { int index = "0123456789ABCDEF".indexOf(c); if (index == -1) { index = "0123456789abcdef".indexOf(c); } return (byte) index; } /** * * @Title: printHexString * @Description: 将指定byte数组以16进制的形式打印到控制台 * @return void 返回类型 * @throws */ public void printHexString(byte[] bytes) { for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } System.out.print(hex.toUpperCase()); } } public static void main(String arg[]) { DES des = new DES(); String testOrg = "我是中国人!123dfasdf "; // DES 加密 String encript = des.encript(testOrg); System.out.println("encript data: " + encript); // DES 解密 String decript = des.decript(encript); System.out.println("decript data: " + decript); // Base64 加密 byte[] base64Encript = Base64.encode(testOrg.getBytes(Charset .forName(DEFAULT_CHARSET)), Base64.DEFAULT); System.out.println("base64 encript:" + new String(base64Encript, Charset.forName(DEFAULT_CHARSET))); // Base64 解密 byte[] base64Decript = Base64.decode(base64Encript, Base64.DEFAULT); System.out.println("base64 decript:" + new String(base64Decript, Charset.forName(DEFAULT_CHARSET))); } }
相关推荐
在网络安全领域,数据加密是保障信息安全的重要手段。在这个场景中,我们关注的是“JS前台加密,Java后台解密实现”,这通常涉及到用户敏感信息如用户名和密码的安全传输。以下是关于这个话题的详细解释: 首先,**...
登录敏感数据传输为明文传输,数据加密传输仅在获取短信验证码时进行,但是在登录过程中未进行加密传输 用于前台页面传输数据到后台时,对敏感数据加密传输,后台在对敏感数据解密处理 本代码块中有base64加密两种...
本主题聚焦于“Flash获取Java后台数据”的技术实践,这涉及到Flash客户端与Java服务器之间的通信以及Java如何连接MySQL数据库获取数据。下面将详细介绍这个过程。 首先,Flash是一款由Adobe公司开发的多媒体创作...
综上所述,本主题涵盖了Java和JavaScript中数据加密的重要技术,包括AES的双向加解密和MD5的单向加密。在实际应用中,这些技术可以帮助保护用户数据,确保网络通信的安全。在开发过程中,要确保遵循最佳安全实践,...
前台对from表单提交的数据进行js加密,后台对前台提交过来的代码进行解密,后台代码为java
RSA算法是一种非对称加密算法,它广泛应用于前端与后端的数据加密和签名,以确保信息在传输过程中的安全性。这篇博文"关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名"探讨了如何在JavaScript前端进行RSA...
AES(Advanced Encryption Standard)是目前广泛应用的一种对称加密算法,为数据加密提供了高效且安全的保护。这个压缩包文件包含了用于前台JS和后台Java进行AES加密解密的工具类,使得在客户端与服务器端的数据传输...
这个Demo展示了客户端和服务器端之间安全通信的一个基本流程,对于理解Web应用中的数据加密和解密机制有着很好的实践意义。在实际开发中,还需要考虑更多的安全因素,如防止中间人攻击、使用安全的密钥管理和协议,...
在"rsa前端加密,java后台解密"的场景中,前端使用RSA公钥对数据进行加密,然后将加密后的数据发送给后端,后端用私钥进行解密。这样可以确保数据在传输过程中的安全性,因为即使数据被截获,没有私钥也无法解密。 ...
"商城小程序JAVA后台"是一个基于Java技术开发的用于支持电商小程序运行的后端系统。这个系统的核心目标是为前端小程序提供稳定、高效的数据处理和服务支持,实现用户购物、支付、订单管理等一系列功能。以下是该系统...
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它为数据提供了强大的安全性。在本文中,我们将深入探讨如何在前端JavaScript和后端Java中实现AES的加密与解密。 前端JavaScript实现AES加密: ...
在标题和描述中提到的"js前台通过RSA,DES加解密,java后台解密、加密",这是一个关于在Web应用程序中实现安全通信的常见实践。这里涉及到两个主要的加密算法:RSA和DES,以及它们在前端JavaScript和后端Java中的...
这个项目“RSA前台加密java后台解密”是关于如何在Web应用中利用RSA算法实现前端数据加密,然后在后端进行解密的安全通信机制。以下是关于RSA算法及其在Java和JavaScript中应用的详细解释。 **RSA算法基础** RSA...
android平台的RSA加密和解密算法,和后台JAVA加密和解密算法有所不同,能够和后台进行数据互通。完美解决后台的加密数据,android平台解密后乱码问题,也不会出现android平台加密密文,后台解析出现乱码问题
在Java编程环境中,数字证书是用于安全通信的重要工具,它们包含了一对密钥——公钥和私钥,常用于加密和解密数据。RSA是一种非对称加密算法,基于两个大素数的乘积,一个用于加密,另一个用于解密。在给定的场景中...
Java后台则承担数据存储、业务逻辑处理、接口提供等核心功能。 1. **小程序开发**:微信小程序的开发使用了微信提供的WXML(微信标记语言)和WXSS(微信样式表)来构建页面结构和样式,以及JavaScript来处理业务...
总之,"android ios java后台通用DES base64加密"这个话题涉及了两个关键的技术点:DES加密用于保护数据的隐私,而Base64编码则使得加密后的数据能在文本环境中顺利传输。理解并掌握这两个技术对于任何IT专业人员来...
DES(Data Encryption Standard)是一种经典的对称加密算法,它的全称是数据加密标准。在本文中,我们将深入探讨DES加密的原理以及如何在前端JavaScript和后端Java之间实现互通。 DES算法基于Feistel结构,它将明文...
在这个项目中,我们结合了微信小程序和Java后台技术,实现了一个完整的微信支付流程。以下将详细阐述涉及的知识点: 1. **微信小程序**:微信小程序是一种轻量级的应用开发框架,允许开发者在微信内部创建和运行...
Java后台服务程序通常指的是在服务器端运行的Java应用程序,它们主要负责处理来自客户端的请求,进行数据处理,以及提供各种服务。这些服务可能是持续运行的,例如Web服务器、应用服务器、消息队列服务等。本压缩包...