⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encrydata2function.java

📁 这是用java写的三个源码
💻 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 + -