通过IO流对文件进行加密和解密



通过IO流对文件进行加密和解密(^

 

对输入的信息进行加密处理

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

public class IOEncryptByte {

        

        

         publicstatic void main(String[] args) throws IOException {

 

                   //创建一个FileOutStream对象,并将需要加密的文件放入其中

                   FileOutputStream  out= new FileOutputStream("d:\\加密.txt");

                   //将加密的信息转换成字节数组

                   byte[]b="我要加密".getBytes();

                   //对每个字节进行^处理

                   for(inti=0;i<b.length;i++){

                            b[i]=(byte)(b[i]^'S');

                   }

                   //再将加密处理后的字节写入文件中

                   out.write(b);

                   //关闭IO

                   out.close();

         }

 

}

 

 

 

对文件进行解密处理

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

 

public class IODeciphering {

        

         publicstatic void main(String[] args) throws IOException {

                   //获得FileInputStream对象,并将需要解密的文件放入

                   FileInputStream  in=new FileInputStream("d:\\加密.txt");

FileOutputStream  out= newFileOutputStream("d:\\解密.txt");

 

                   //定义一个字节数组,用于存放每次读取的信息

                   bytech[]=new byte[1024];

                   //定义一个int变量,存放读取出来的信息

                   intn=0;

                   //定义一个String对象,存放解密后的内容

                   Stringcontext=null;

                   //判断是否读取结束              

                   while((n=in.read(ch,0,ch.length))!=-1){

                            //遍历字节数组,将每个字节进行^处理,进行解密

                            for(inti=0;i<ch.length;i++){

                                     ch[i]=(byte)(ch[i]^'S');

                            }

                            //将解密成功后的字节数组转换成字符串

                            context=newString(ch,0,n)

                            //将解密后的内容转换成字节数组,并存放到解密后的文件中

out.write(context.getBytes());

                           

                           

                   }

      //输出解密的内容

                   System.out.println(context);

                   //关闭输入流

                   out.close();

                  

                  

         }

 

}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA是一种非对称加密算法,它可以用于对文件进行加密解密。在Java中,可以使用Java加密库来实现RSA加密解密。下面是一个简单的示例代码: ```java import java.io.*; import java.security.*; import javax.crypto.*; public class RSAEncryption { private static final String PUBLIC_KEY_FILE = "public.key"; private static final String PRIVATE_KEY_FILE = "private.key"; public static void main(String[] args) throws Exception { // 生成密钥对 KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); SecureRandom random = new SecureRandom(); keyGen.initialize(1024, random); KeyPair keyPair = keyGen.generateKeyPair(); // 保存公钥和私钥到文件 saveKeyToFile(keyPair.getPublic(), PUBLIC_KEY_FILE); saveKeyToFile(keyPair.getPrivate(), PRIVATE_KEY_FILE); // 加密文件 encryptFile("plaintext.txt", "ciphertext.txt", keyPair.getPublic()); // 解密文件 decryptFile("ciphertext.txt", "decrypted.txt", keyPair.getPrivate()); } private static void saveKeyToFile(Key key, String fileName) throws IOException { byte[] keyBytes = key.getEncoded(); FileOutputStream fos = new FileOutputStream(fileName); fos.write(keyBytes); fos.close(); } private static void encryptFile(String inputFile, String outputFile, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(outputFile); byte[] buffer = new byte[100]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { byte[] output = cipher.update(buffer, 0, bytesRead); if (output != null) { fos.write(output); } } byte[] output = cipher.doFinal(); if (output != null) { fos.write(output); } fis.close(); fos.flush(); fos.close(); } private static void decryptFile(String inputFile, String outputFile, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(outputFile); byte[] buffer = new byte[128]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { byte[] output = cipher.update(buffer, 0, bytesRead); if (output != null) { fos.write(output); } } byte[] output = cipher.doFinal(); if (output != null) { fos.write(output); } fis.close(); fos.flush(); fos.close(); } } ``` 上面的代码中,首先生成密钥对,然后保存公钥和私钥到文件中。接着,使用公钥对明文文件进行加密,将密文保存到文件中。最后,使用私钥对密文文件进行解密,将明文保存到文件中。 需要注意的是,RSA算法只能加密比密钥长度小的数据,因此在加密文件时,需要将文件分块加密,并将每个加密块保存到文件中。在解密时,将每个加密块读取出来,进行解密,然后将解密结果拼接起来即可。 另外,由于RSA算法的加密解密速度比较慢,因此在加密文件时,可能需要使用其他加密算法,如AES算法,来加密文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值