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中如何实现对文件和字符串加密. 解密?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何对URL进行加密和解密啊

如何利用JAVA对文档进行加密和解密处理,完整的java类

如何对数据库进行加密和解密

如何使用java对密码加密 加密方式aes

如何使用Base64进行加密和解密

如何对文档进行加密和解密