java中如何实现对文件和字符串加密. 解密?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何实现对文件和字符串加密. 解密?相关的知识,希望对你有一定的参考价值。
DES 密钥生成,加解密方法,,你可以看一下//DES 密钥生成工具
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class GenKey
private static final String DES = "DES";
public static final String SKEY_NAME = "key.des";
public static void genKey1(String path)
// 密钥
SecretKey skey = null;
// 密钥随机数生成
SecureRandom sr = new SecureRandom();
//生成密钥文件
File file = genFile(path);
try
// 获取密钥生成实例
KeyGenerator gen = KeyGenerator.getInstance(DES);
// 初始化密钥生成器
gen.init(sr);
// 生成密钥
skey = gen.generateKey();
// System.out.println(skey);
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
oos.writeObject(skey);
oos.close();
catch (NoSuchAlgorithmException e)
e.printStackTrace();
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
/**
* @param file : 生成密钥的路径
* SecretKeyFactory 方式生成des密钥
* */
public static void genKey2(String path)
// 密钥随机数生成
SecureRandom sr = new SecureRandom();
// byte[] bytes = 11,12,44,99,76,45,1,8;
byte[] bytes = sr.generateSeed(20);
// 密钥
SecretKey skey = null;
//生成密钥文件路径
File file = genFile(path);
try
//创建deskeyspec对象
DESKeySpec desKeySpec = new DESKeySpec(bytes,9);
//实例化des密钥工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
//生成密钥对象
skey = keyFactory.generateSecret(desKeySpec);
//写出密钥对象
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
oos.writeObject(skey);
oos.close();
catch (NoSuchAlgorithmException e)
e.printStackTrace();
catch (InvalidKeyException e)
e.printStackTrace();
catch (InvalidKeySpecException e)
e.printStackTrace();
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
private static File genFile(String path)
String temp = null;
File newFile = null;
if (path.endsWith("/") || path.endsWith("\\"))
temp = path;
else
temp = path + "/";
File pathFile = new File(temp);
if (!pathFile.exists())
pathFile.mkdirs();
newFile = new File(temp+SKEY_NAME);
return newFile;
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
genKey2("E:/a/aa/");
//DES加解密方法
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.SecretKey;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*制卡文件加/解密 加密方式DES
*/
public class SecUtil
public static final Log log = LogFactory.getLog(SecUtil.class);
/**
* 解密
*
* @param keyPath
* 密钥路径
* @param source
* 解密前文件
* @param dest
* 解密后文件
*/
public static void decrypt(String keyPath, String source, String dest)
SecretKey key = null;
try
ObjectInputStream keyFile = new ObjectInputStream(
// 读取加密密钥
new FileInputStream(keyPath));
key = (SecretKey) keyFile.readObject();
keyFile.close();
catch (FileNotFoundException ey1)
log.info("Error when read keyFile");
throw new RuntimeException(ey1);
catch (Exception ey2)
log.info("error when read the keyFile");
throw new RuntimeException(ey2);
// 用key产生Cipher
Cipher cipher = null;
try
// 设置算法,应该与加密时的设置一样
cipher = Cipher.getInstance("DES");
// 设置解密模式
cipher.init(Cipher.DECRYPT_MODE, key);
catch (Exception ey3)
log.info("Error when create the cipher");
throw new RuntimeException(ey3);
// 取得要解密的文件并解密
File file = new File(source);
String filename = file.getName();
try
// 输出流,请注意文件名称的获取
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(dest));
// 输入流
CipherInputStream in = new CipherInputStream(
new BufferedInputStream(new FileInputStream(file)), cipher);
int thebyte = 0;
while ((thebyte = in.read()) != -1)
out.write(thebyte);
in.close();
out.close();
catch (Exception ey5)
log.info("Error when encrypt the file");
throw new RuntimeException(ey5);
/**
* 加密
* @param keyPath 密钥路径
* @param source 加密前文件
* @param dest 加密后文件
*/
public static void encrypt(String keyPath, String source, String dest)
SecretKey key = null;
try
ObjectInputStream keyFile = new ObjectInputStream(
// 读取加密密钥
new FileInputStream(keyPath));
key = (SecretKey) keyFile.readObject();
keyFile.close();
catch (FileNotFoundException ey1)
log.info("Error when read keyFile");
throw new RuntimeException(ey1);
catch (Exception ey2)
log.info("error when read the keyFile");
throw new RuntimeException(ey2);
// 用key产生Cipher
Cipher cipher = null;
try
// 设置算法,应该与加密时的设置一样
cipher = Cipher.getInstance("DES");
// 设置解密模式
cipher.init(Cipher.ENCRYPT_MODE, key);
catch (Exception ey3)
log.info("Error when create the cipher");
throw new RuntimeException(ey3);
// 取得要解密的文件并解密
File file = new File(source);
String filename = file.getName();
try
// 输出流,请注意文件名称的获取
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(dest));
// 输入流
CipherInputStream in = new CipherInputStream(
new BufferedInputStream(new FileInputStream(file)), cipher);
int thebyte = 0;
while ((thebyte = in.read()) != -1)
out.write(thebyte);
in.close();
out.close();
catch (Exception ey5)
log.info("Error when encrypt the file");
throw new RuntimeException(ey5);
参考技术A 你好,加密的方式有很多中,如传统加密,后期的分组加密,序列流加密,这些是对称加密,现在有著名的非对称加密。
java的扩展包很好的实现了你需要的功能。这个包在java.security.*;当然了还有很多好的加密方法,在sun的第三方jar包中有。目前密码加密使用用的是MD5加密,这个是单向加密,不可以解密。要想实现加密和解密,那么就需要学习密码学的知识。
希望对你有所帮助。
如何使用Base64进行加密和解密
这个我不清楚。给电脑上的文件加密或者文件夹加密,你可以使用超级加密3000。
超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全!
具体操作方法:
1下载安装超级加密3000。
2 然后在需要加密的文件上单击鼠标右键选择加密。
3 在弹出的文件加密窗口中设置文件加密密码就OK了。
超级加密3000的下载地址你可以在百度上搜索超级加密3000,第一个就是。 参考技术A 在c#中如果想让明文编程密文,有两大类方式,加密和编码,加密分为对称和不对称加密,对称加密典型的是des算法的加密,不对称加密典型的如md5加密,说穿了就是获取哈希码,编码就是把明文转换成另一种不易懂或者方便传输的数据,base64是把长字符转换成短字符,方便传输,具体的convert类下面有具体的方法,调用就可以了,
参考技术B
这里有详细的解释,我就是从这里学的
参考技术C 加密和解密文本还是什么?以上是关于java中如何实现对文件和字符串加密. 解密?的主要内容,如果未能解决你的问题,请参考以下文章