`

数据加密文件

 
阅读更多
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);

 

分享到:
评论

相关推荐

    java文件数据加密

    文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密文件数据加密

    使用unidac给sqlite数据文件加密

    标题 "使用unidac给sqlite数据文件加密" 描述了如何在Delphi开发环境中利用UNIDAC组件对SQLite数据库文件进行安全加密与解密的操作。UNIDAC(Universal Data Access Components)是Devart公司推出的一款数据库连接...

    数据加密技术.pdf

    本文档“数据加密技术.pdf”深入探讨了数据加密的基本原理、常用算法以及如何有效地利用加密算法保护数据。 ### 数据加密的重要性 在信息化社会,数据的价值不可估量。无论是个人隐私还是企业商业秘密,一旦泄露,...

    行为审计终端管控数据加密解决方案.ppt

    在事前主动防御阶段,方案采用文档透明加解密技术,不对用户操作习惯、文件格式和网络外设使用造成影响,但对加密文件的外发设置了严格的限制。例如,仅限于特定部门内部流转,且能控制阅读权限,根据员工级别设定...

    利用图片加密文件 数据加密与解密

    我们以"利用图片加密文件 数据加密与解密"为例,这个实例展示了如何将bmp格式的图片用于加密文本文件。以下是对这个主题的详细解释: 首先,我们需要理解加密的基本原理。加密是一种通过特定算法将明文(可读数据)...

    【数据安全】Oracle 透明数据加密(TDE) 完整操作手册

    Oracle 透明数据加密(TDE)是Oracle数据库提供的一种安全特性,用于保护敏感数据免受未经授权的访问。TDE能够对存储在特定列或整个表空间中的数据进行加密,确保即使数据文件被盗,数据仍保持安全。以下是关于TDE的...

    简单数据通信加密DLL文件

    总的来说,"简单数据通信加密DLL文件"是一个实用的工具,它封装了数据加密的核心逻辑,简化了开发者在项目中实现加密功能的步骤。通过对这个DLL的探索和学习,我们可以更好地理解和掌握数据加密技术,增强我们的信息...

    数据加密模块代码和类图.zip

    某软件公司要开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时提供了稍复杂的逆向输出加密,还提供了更加高级的求模加密。用户先使用简单的加密算法对字符串进行加密,...

    数据存储加密技术白皮书.pdf

    数据加密技术可以分类为硬盘加密、文件加密、数据库加密和网络加密等。 * 硬盘加密是指对存储设备的加密,例如对硬盘、固态硬盘、USB闪存等的加密。 * 文件加密是指对文件的加密,例如对文档、图片、视频等文件的...

    数据加密技术 ----数据加密解密

    在文件名"dataencrypt"中,我们可以推测这是一个关于数据加密的源代码文件或执行文件。这个文件可能是用C++语言编写的,包含了实现加密和解密功能的函数或类。开发者可能使用了标准库中的加密函数,或者自定义了加密...

    android 数据加密_数据库数据加密_文件加密

    本教程将深入探讨如何在Android平台上实现数据加密,包括数据库数据加密和文件加密,以确保信息的安全性。 首先,我们来看一下数据库数据加密。Android通常使用SQLite作为默认的本地数据库,而SQLite的数据通常是...

    Android数据加密

    数据加密是确保数据隐私和安全的重要手段,它使得即使数据被盗,也无法轻易被解读。本文将深入探讨Android数据加密的原理、方法以及如何应用于数据库加密。 Android系统提供了多种加密库和技术,以支持应用程序实现...

    C# 数据加密 字符串加密并保存文件

    C#是一种广泛使用的编程语言,它提供了丰富的库和功能来实现数据加密。本文将深入探讨如何使用C#进行字符串加密,并将其保存到文件中,以此来保护您的数据不被未经授权的访问。 首先,我们需要了解基本的加密概念。...

    Oracle数据加密

    在Oracle数据加密的上下文中,JAR文件可能包含用于实现自定义加密算法或者集成第三方加密库的Java代码。这些Java类库可以扩展Oracle的加密功能,例如,使用非标准的加密算法或者实现更复杂的加密策略。 Oracle还...

    实验五数据加密与解密实验.

    数据加密与解密实验.trd ty trh g

    vc++6.0DES加密算法+数据加密+文件加密(下载后修改优化的程序)

    解密过程则相反,读取加密文件,解密后再写回磁盘。 多重DES加密算法: 为了增强DES的安全性,有时会采用多重DES加密,即使用同一个密钥进行多次DES加密,如双DES(DEDE)。这样做虽然不能解决56位密钥的固有弱点...

    spring配置文件加密实现

    常见的有AES(高级加密标准)、DES(数据加密标准)或RSA(公钥加密算法)。AES由于其高效性和安全性,常被用于此类场景。Java的JCE(Java Cryptography Extension)提供了丰富的加密库支持,可以方便地实现这些加密...

    JAVA数据加密解密的实例

    本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不可读信息)的过程,以保护数据不被未经授权的用户访问。解密则是加密的逆过程,将...

    c#中数据加密和解密

    本实例探讨了如何使用C#来实现数据加密,特别是针对文件中的机密数据。 首先,我们要了解C#中用于数据加密的关键组件。系统自带的`System.Security.Cryptography`命名空间提供了各种加密算法和服务,例如MD5。MD5...

    数据加密给你的私人信息进行加锁

    "数据加密"是一种强大的技术手段,它为你的私人信息加上了一把无形的锁,确保只有授权的人才能访问。标题"数据加密给你的私人信息进行加锁"直指核心,揭示了加密技术在保护信息安全中的关键作用。 数据加密的工作...

Global site tag (gtag.js) - Google Analytics