package com.unifease.utility; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Security; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import Decoder.BASE64Decoder; import Decoder.BASE64Encoder; /** * 3DES加密解密处理 */ public class TripleDES { // 定义 加密算法,可用 DES,DESede,Blowfish private static final String Algorithm = "DESede"; public static final String PASSWORD_CRYPT_KEY="c+xRAPXG8tvD+nHnafKcnJBCgkpPzqIr"; public static final String PASSWORD_IV="7MN+0yYTukY="; public static void main(String[] args) { /* System.out.println("早餐的解码: " + URLDecoder.decode("%E6%97%A9%E9%A4%90")); System.out.println("早餐的编码: " + URLEncoder.encode("早餐")); String encryptData = "早餐"; String jmdata = TripleDES.encryptData(encryptData); System.out.println("加密的数据:[" + jmdata + "]"); String jiemidata = TripleDES.decryptData(jmdata); System.out.println("解密的数据:[" + jiemidata + "]"); */ } /** * @param 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; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } /** * 数据加密 * * @param PASSWORD_CRYPT_KEY * 密钥值 一般由第三方认证机构提供 * @param PASSWORD_IV * 密钥向量值 一般由第三方认证机构提供 * @param str * 被加密对象 * @return 返回加密后的对象 */ public static String encryptData(String encryptData) { Security.addProvider(new com.sun.crypto.provider.SunJCE()); // 创建加密的强随机数生成器 DESedeKeySpec dks; SecretKeyFactory keyFactory; try { // BASW64解码,这个很关键哦! BASE64Encoder encoder = new BASE64Encoder(); BASE64Decoder decoder = new BASE64Decoder(); byte[] buf = decoder.decodeBuffer(PASSWORD_IV); byte[] key = decoder.decodeBuffer(PASSWORD_CRYPT_KEY); // 生成密钥 dks = new DESedeKeySpec(key); // 指定算法 keyFactory = SecretKeyFactory.getInstance(Algorithm); // 指定生成的密钥 SecretKey securekey = keyFactory.generateSecret(dks); // 指定向量值 IvParameterSpec iv = new IvParameterSpec(buf); // 指定加密mode和padding ,ECB模式不支持IV向量 Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");// DESede // 只支持 // CBC和ECB两种模式 // 初始化加密程序 cipher.init(Cipher.ENCRYPT_MODE, securekey, iv); // 返回加密后的结果,注意BASE64的编码 return encoder.encodeBuffer(cipher.doFinal(encryptData.getBytes())); } catch (NoSuchAlgorithmException e) { //log.error("没有指定的算法", e); return null; } catch (InvalidKeySpecException e) { //log.error("指定的密钥不正确", e); return null; } catch (NoSuchPaddingException e) { //log.error("Padding模式不匹配", e); } catch (InvalidAlgorithmParameterException e) { //log.error("算法参数异常", e); return null; } catch (IllegalBlockSizeException e) { //log.error("密钥字节数不匹配", e); return null; } catch (BadPaddingException e) { //log.error("Padding加载不正确", e); return null; } catch (InvalidKeyException e) { //log.error("IV向量值错误!", e); return null; } catch (IOException e) { //log.error("文件流错误", e); return null; } return null; } /** * 数据解密 * * @param PASSWORD_CRYPT_KEY密钥值 * 一般由第三方认证机构提供 * @param PASSWORD_IV * 密钥向量值 一般由第三方认证机构提供 * @param str * @return */ public static String decryptData(String decryptData) { Security.addProvider(new com.sun.crypto.provider.SunJCE()); // SecureRandom sr = new SecureRandom(); DESedeKeySpec dks; SecretKeyFactory keyFactory; try { // BASW64解码和编码,这个很关键哦! BASE64Encoder encoder = new BASE64Encoder(); BASE64Decoder decoder = new BASE64Decoder(); byte[] buf = decoder.decodeBuffer(PASSWORD_IV); byte[] key = decoder.decodeBuffer(PASSWORD_CRYPT_KEY); // 生成密钥 dks = new DESedeKeySpec(key); // 指定算法 keyFactory = SecretKeyFactory.getInstance(Algorithm); // 指定生成的密钥 SecretKey securekey = keyFactory.generateSecret(dks); // 指定向量值 IvParameterSpec iv = new IvParameterSpec(buf); // 指定加密mode和padding ,ECB模式不支持IV向量 Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");// DESede // 只支持 // CBC和ECB两种模式 // 初始化加密程序 cipher.init(Cipher.DECRYPT_MODE, securekey, iv); // 返回加密后的结果,注意参数的BASE64 解码,即decoder.decodeBuffer(str); return new String(cipher.doFinal(decoder .decodeBuffer(decryptData))); } catch (NoSuchAlgorithmException e) { return null; } catch (InvalidKeySpecException e) { return null; } catch (NoSuchPaddingException e) { return null; } catch (InvalidAlgorithmParameterException e) { return null; } catch (IllegalBlockSizeException e) { e.printStackTrace(); return null; } catch (BadPaddingException e) { return null; } catch (InvalidKeyException e) { return null; } catch (IOException e) { // return null; } return null; } }
显示进行Unicode编码再将数据加密、
String type = "byt_GetSchoolName"; String jsonstr = "{\"type\":\"" + type + "\",\"username\":\"" + SZYEY_USERNAME + "\",\"sbbs\":\"" + DEVICEID + "\"}"; String postParam = URLEncoder.encode(TripleDES.encryptData(jsonstr)); String result = HttpRequest.sendPost(SZYEY_URL, postParam);
相关推荐
文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密
Oracle 透明数据加密 (TDE) 能够加密存储在表和表空间中的敏感数据,例如手机号码,身份证号等,对于有权访问数据的数据库用户或应用程序,加密数据将被透明地解密。 TDE 可在存储介质或数据文件被盗时保护存储在...
数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串
某软件公司要开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时提供了稍复杂的逆向输出加密,还提供了更加高级的求模加密。用户先使用简单的加密算法对字符串进行加密,...
行为审计终端管控数据加密解决方案
数据加密与解密实验.trd ty trh g
C#数据加密简介,文档中较为详细地说明了C#编程过程中的加密技术!
本实例实现利用bmp 格式的图片加密文本文件,运行程序,单击选择图片按钮,选择一个用来加密的bmp格式的图片,单击加密
数据加密与数字签名系统,转发非原创,走过路过不要错过。
把数据加密后可以增加数据的安全性,本实例实现对文件的机密数据进行加密的功能。运行程序,在文本框中输入要加密的数据,单击【加密】按钮,对数据进行加密,并将加密后的数据显示在“加密后的字符”文本框中
登录敏感数据传输为明文传输,数据加密传输仅在获取短信验证码时进行,但是在登录过程中未进行加密传输 用于前台页面传输数据到后台时,对敏感数据加密传输,后台在对敏感数据解密处理 本代码块中有base64加密两种...
前后端数据加密传输demo springboot项目 可在idea中直接打开 spring tomcat环境下可迁移使用
数据加密、数据库数据加、文件加密 均可进行加密 当时测试了好多 终于调通 分享给大家 希望可以帮到你们
RSA数据加密 任务 RSA数据加密 任务背景 RSA加密算法是一种非对称秘钥加密算法,即公钥和私钥不一致。正是因为这种特性,RSA通常运用到数字签名和数字证书等应用场景。此次任务是通过Crypto模块中提供的RSA加密算法...
一个简单的用于网络通信的数据加密DLL文件,有兴趣的可以看看!
加密连接数据 加密数据连接配置文件 软件 将配置文件的连接字符串和密码进行加密
国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式
实现DES算法,数据加密解密,文件加密解密
Orcale数据加密,含数据库,JAR包