📄 encrydata2function.java
字号:
package mircoenorde.grade2;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.SecretKey;
import java.security.Security;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import javax.crypto.KeyGenerator;
import javax.crypto.Cipher;
import java.io.FileOutputStream;
import java.security.MessageDigest;
import java.security.SecureRandom;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class EncryData2Function {
public void encry2Function(String fileIN, String fileOUT, String password,
int grade, int delFile) {
try {
//第一步,将需要加密的文件读入;
File file = new File(fileIN);
String filename = file.getName(); //得到文件名;
FileInputStream fin = new FileInputStream(file);
byte[] content = new byte[fin.available()];
fin.read(content); //将文件读入content;
fin.close();
//第二步,得到password的摘要值,并取其前面128位用来构造AES对称密钥;
Security.addProvider(new BouncyCastleProvider()); //加入算法提供者;
MessageDigest passwordhash = MessageDigest.getInstance("SHA1", "BC");
passwordhash.update(password.getBytes());
byte[] passwordhashbyte = passwordhash.digest(); //
byte[] passwordhash128 = new byte[16];
for (int i = 0; i < 16; i++) {
passwordhash128[i] = passwordhashbyte[i];
}
SecretKey passwordhash128AES = new SecretKeySpec(passwordhash128,
"AES"); //将passwordhash128变幻成AES密钥;
//第三步,随机生成一个AES对称密钥,用来加密content;
KeyGenerator keyGenAES = KeyGenerator.getInstance("AES",
"BC");
SecureRandom secureRandom = new SecureRandom(); //生成用于初始化的随机数
keyGenAES.init(128, secureRandom); //指定密钥的长度;
SecretKey aeskey2 = keyGenAES.generateKey(); //生成用于加密content的对称密钥;
//第四步,用aeskey1将content加密;
Cipher enCipherAES = Cipher.getInstance("AES/ECB/PKCS5Padding",
"BC");
enCipherAES.init(Cipher.ENCRYPT_MODE, aeskey2); //初始化;
byte[] encontent = enCipherAES.doFinal(content); //此时已将content加密;
//第五步,将aeskey1用passwordhash128AES加密;
enCipherAES.init(Cipher.ENCRYPT_MODE, passwordhash128AES); //此时没有必要重新生成加密机对象,只需将enCipherAES重新初始化即可;
//enCipherAES.update(aeskey1.getEncoded());
byte[] enaeskey1 = enCipherAES.doFinal(aeskey2.getEncoded()); //此时已将aeskey1加密完成;
//第六步,构造EncryData1类;
EncryData2 engrade2 = new EncryData2(grade);
engrade2.setfilename(filename);
engrade2.setcontent(encontent);
engrade2.setenaeskeybyte(enaeskey1);
engrade2.setmesdigest(passwordhashbyte);
//第七步,将文件写到指定目录;
FileOutputStream fout = new FileOutputStream(fileOUT+filename+".sec");
ObjectOutputStream objOUT = new ObjectOutputStream(fout);
objOUT.writeObject(engrade2);
objOUT.close();
//第八步,删除原文件;
if (delFile == 1) {
File delfile = new File(fileIN);
delfile.delete();
}
} catch (Exception ex) {
System.out.println(ex);
ex.printStackTrace();
}
}
public static void main(String[] args) {
String fileIN = "E:/test.txt";
String fileOUT = "F:/temp/pp.sec";
String password = "12345";
int grade = 2;
EncryData2Function encryData2Function = new EncryData2Function();
encryData2Function.encry2Function(fileIN, fileOUT, password, grade, 1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -