在这主要是用到两个流:
CipherInputStream cin=new CipherInputStream(in,c);
CipherOutputStream cout=new CipherOutputStream(out,c);
CipherOutputStream 由一个 OutputStream 和一个 Cipher 组成 ,write() 方法在将数据写出到基础 OutputStream 之前先对该数据进行处理(加密或解密) ,
同样CipherInputStream是由InputStream和一个Cipher组成,read()方法在读入时,对数据进行加解密操作.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
public class DES4 {
private static String Algorithm = "DES"; // 定义 加密算法,可用DES,DESede,Blowfish
static {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
// 生成密钥, 注意此步骤时间比较长
public static byte[] getKey() throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
return deskey.getEncoded();
}
/**
* 加密
* @param enfile 要加密的文件
* @param defile 加密后的文件
* @param key 密钥
* @throws Exception
*/
public static void encode(String enfile,String defile, byte[] key) throws Exception {
//秘密(对称)密钥(SecretKey继承(key))
//根据给定的字节数组构造一个密钥。
SecretKey deskey=new SecretKeySpec(key,Algorithm);
//生成一个实现指定转换的 Cipher 对象。Cipher对象实际完成加解密操作
Cipher c=Cipher.getInstance(Algorithm);
//用密钥初始化此 cipher
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] buffer=new byte[1024];
FileInputStream in=new FileInputStream(enfile);
OutputStream out=new FileOutputStream(defile);
//从 InputStream 和 Cipher 构造 CipherInputStream。
// read() 方法在从基础 InputStream 读入已经由 Cipher 另外处理(加密或解密)
CipherInputStream cin=new CipherInputStream(in,c);
int i;
while((i=cin.read(buffer))!=-1){
// for(int k=0;k<i;k++){
// System.out.print(buffer[k]+" ");
// }
out.write(buffer,0,i);
}
out.close();
cin.close();
}
// 解密
public static void decode(String file,String defile, byte[] key) throws Exception {
// //根据给定的字节数组构造一个密钥。
// SecretKey deskey=new SecretKeySpec(key,Algorithm);
// //生成一个实现指定转换的 Cipher 对象。
// Cipher c=Cipher.getInstance(Algorithm);
// //用密钥初始化此 cipher
// c.init(Cipher.DECRYPT_MODE, deskey);
//DES算法要求有一个可信任的随机数源
SecureRandom sr=new SecureRandom();
//创建一个 DESKeySpec 对象,指定一个 DES 密钥
DESKeySpec ks=new DESKeySpec(key);
//生成指定秘密密钥算法的 SecretKeyFactory 对象。
SecretKeyFactory factroy=SecretKeyFactory.getInstance(Algorithm);
//根据提供的密钥规范(密钥材料)生成 SecretKey 对象,利用密钥工厂把DESKeySpec转换成一个SecretKey对象
SecretKey sk=factroy.generateSecret(ks);
//生成一个实现指定转换的 Cipher 对象。Cipher对象实际完成加解密操作
Cipher c=Cipher.getInstance(Algorithm);
//用密钥和随机源初始化此 cipher
c.init(Cipher.DECRYPT_MODE, sk,sr);
byte[] buffer=new byte[1024];
FileInputStream in=new FileInputStream(file);
OutputStream out=new FileOutputStream(defile);
//CipherOutputStream 由一个 OutputStream 和一个 Cipher 组成
//write() 方法在将数据写出到基础 OutputStream 之前先对该数据进行处理(加密或解密)
CipherOutputStream cout=new CipherOutputStream(out,c);
int i;
while((i=in.read(buffer))!=-1){
// for(int k=0;k<i;k++){
// System.out.print(buffer[k]+" ");
// }
cout.write(buffer,0,i);
}
cout.close();
in.close();
}
public static void main(String[] args)throws Exception {
byte[] key="00000000".getBytes();
//文件加密
encode("E:/test/des.txt","E:/test/encrypt.txt",key);
//文件解密
decode("E:/test/encrypt.txt","E:/test/decrypt.txt",key);
}
}
分享到:
相关推荐
"java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...
本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#中实现文件加密主要依赖于.NET Framework提供的加密类库,如System.Security....
《深入理解ENC文件加密解密工具:以PrimaSoft Encryption Utility为例》 在信息安全日益重要的今天,文件加密解密工具成为保护数据隐私的关键工具。"ENC文件加密解密工具",特别是PrimaSoft Encryption Utility,是...
文件的加密解密,一些流的操作,流的加密....DES;文件的加密解密,一些流的操作,流的加密....DES
在这个项目中,我们关注的是使用C++编程语言实现对TXT文本文件的加密和解密功能。C++是一种强大且灵活的编程语言,适合开发这类底层系统级的任务。 文件加密的主要目标是保护数据的隐私,防止未经授权的访问。这...
3. 文件加密解密系统V2.2 “文件加密解密系统V2.2”是一个软件应用,它提供了用户友好的界面来执行文件的加密和解密操作。版本号V2.2可能表示该系统已经经过多次升级和优化,增加了新功能或提升了性能。通常这类系统...
在这个特定的案例中,"MFC实现文本文件加密解密"是一个使用MFC框架编写的程序,它允许用户对文本文件进行加密和解密操作,确保敏感数据在传输或存储时的安全性。 在VC2010环境下,开发者通常会利用MFC的类库,如...
【标题】"全能文件加密解密源码.zip"是一个包含Visual Studio工程的压缩包,它提供了C#语言编写的源代码,用于实现文件的加密和解密功能。这个项目对于那些想要深入理解加密和解密机制,或者需要在自己的应用程序中...
总之,通过使用这个RSA加密解密工具并遵循操作指南,用户可以有效地保护他们的敏感文件,防止未经授权的访问。同时,了解RSA加密的基本原理和操作流程,也有助于提升用户的信息安全意识和技能。
MD5 单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 ...RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密函数 获取Hash描述表 RSA签名 RSA 签名验证
**C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...
综上所述,VB6的这个加密解密程序是一个实用的工具,结合了DES和AES这两种强大的加密算法,支持用户自定义密钥,且具备文件级别的加密解密功能。它不仅提供了基本的数据安全措施,而且在VB6环境中易于理解和使用,...
“易飞用户加密解密”可能指的是易飞公司提供的一个针对用户数据进行加解密的服务或工具,如EFPASS.exe这个文件所示,它可能是一个执行程序,用于用户数据的安全管理。 三、加密算法 易飞用户加密解密可能采用了...
文件加密解密代码
压缩包内的“3des.exe”文件很可能是该3DES加密解密工具的可执行程序,用户可以通过运行这个程序来实现对数据的加密和解密。使用此类工具时,用户需要输入适当的密钥,并选择加密或解密模式。对于3DES,为了保证安全...
本文将深入探讨“文件加密解密软件”的基础知识、工作原理以及如何选择和使用这类软件。 首先,让我们理解文件加密的基本概念。文件加密是一种通过特定算法将文件中的数据转化为无法直接读取的形式,这一过程称为...
总的来说,"小锁匠"是一款实用的文件加密解密工具,适用于需要批量处理文件安全的场景。其基于.NET Framework开发,可能采用了对称加密算法,并提供了源码供用户研究和定制。在使用时,用户应确保计算机已安装了合适...
"实用小程序 全文件加密解密文件加密解密"这个标题暗示了我们关注的是一个用于保护文件安全的小程序,它提供了文件的加密和解密功能。这类工具通常用于确保敏感数据在传输或存储时不被未经授权的人员访问。 描述中...
本文将深入探讨“BAT批处理脚本-加密解密-解密.zip”这一主题,以及如何利用它进行文件的加密与解密。 批处理脚本,也称为批处理文件或批处理程序,是Microsoft Windows操作系统中的一种命令行脚本语言。它由一系列...
这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。