在Java中使用DES进行文本/文件加密/解密

在Java中使用DES进行文本/文件加密/解密,java,file,encryption,base64,des,Java,File,Encryption,Base64,Des,我有一个学校项目,我应该创建一个程序,可以用Java中的DES算法对文本和文件进行加密和解密。但我有一个问题-我不能在Base64中对加密文件进行编码,因为它是在ANSI中加密的。(例如¾捉;úV>úhXð9WØ)如何将文件的密文转换为Base64? 有人能帮我吗 import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import java.io.*; import java.nio.charset.StandardC

我有一个学校项目,我应该创建一个程序,可以用Java中的DES算法对文本和文件进行加密和解密。但我有一个问题-我不能在Base64中对加密文件进行编码,因为它是在ANSI中加密的。(例如¾捉;úV>úhXð9WØ)如何将文件的密文转换为Base64? 有人能帮我吗


import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Base64;
import java.util.Scanner;

public class Main
{
    //creating an instance of the Cipher class for encryption
    private static Cipher encrypt;
    //creating an instance of the Cipher class for decryption
    private static Cipher decrypt;
    //initializing vector
    private static final byte[] initialization_vector = { 22, 33, 11, 44, 55, 99, 66, 77 };


    //main() method
    public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException,
            IllegalBlockSizeException, InvalidKeyException, InvalidAlgorithmParameterException, IOException {

        Scanner user=new Scanner(System.in);
        SecretKey scrtkey = KeyGenerator.getInstance("DES").generateKey();
        AlgorithmParameterSpec aps = new IvParameterSpec(initialization_vector);
        encrypt=Cipher.getInstance("DES/CBC/PKCS5Padding");
        decrypt= Cipher.getInstance("DES/CBC/PKCS5Padding");

        // Initialize the cipher for encryption and decryption
        encrypt.init(Cipher.ENCRYPT_MODE, scrtkey,aps);
        decrypt.init(Cipher.DECRYPT_MODE, scrtkey,aps);


        System.out.print("Choose between text or file: ");
        String fromuser=user.nextLine();
        fromuser=fromuser.toLowerCase();
        if(fromuser.equals("text")){
            text();
        }
        else if(fromuser.equals("file")){
            file();
        }
        else
            System.out.print("\nGabim!!!");
    }

    //----------------------------------------TEXT/FILE ENCRYPTION/DECRYPTION-----------------------------------------//
    public static void text() throws BadPaddingException, IllegalBlockSizeException {

        Scanner input=new Scanner(System.in);
        System.out.print("Text:");
        String plain=input.nextLine();

        String encrypted = encrypt(encrypt, plain);
        System.out.println("Encrypted text: " + encrypted);

        String decrypted = decrypt(decrypt, encrypted);
        System.out.println("Decrypted text: " + decrypted);
        input.close();
    }
    public static void file() throws IOException {
        Scanner input=new Scanner(System.in);
        System.out.println("File to encrypt:");
        String textFile=input.nextLine();

        System.out.println("Where to save encrypted file:");
        String encryptedData =input.nextLine();

        System.out.println("Where to save decrypted file:");
        String decryptedData = input.nextLine();

        //calling encrypt() method to encrypt the file
        encryption(new FileInputStream(textFile), new FileOutputStream(encryptedData));
        //calling decrypt() method to decrypt the file
        decryption(new FileInputStream(encryptedData), new FileOutputStream(decryptedData));
        //prints the statement if the program runs successfully
        System.out.println("The encrypted and decrypted files have been created successfully.");
        input.close();
    }

    //----------------------------------------TEXT ENCRYPTION/DECRYPTION----------------------------------------------//
    public static String encrypt(Cipher cipher, String plainStr) throws BadPaddingException,IllegalBlockSizeException
    {
        byte[] plainBytes;
        byte[] encryptedBytes;
        plainBytes=plainStr.getBytes(StandardCharsets.UTF_8);
        encryptedBytes=cipher.doFinal(plainBytes);
        //return new String(encryptedBytes,StandardCharsets.ISO_8859_1);
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(Cipher cipher,String encryptedStr) throws BadPaddingException,IllegalBlockSizeException
    {
        byte[] encryptedBytes=Base64.getDecoder().decode(encryptedStr);
        //byte[] encryptedBytes=encryptedStr.getBytes(StandardCharsets.ISO_8859_1);
        byte[] decryptedBytes=cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes,StandardCharsets.UTF_8);
    }


    //---------------------------------------------FILES ENCRYPTION/DECRYPTION----------------------------------------//
    //method for encryption
    private static void encryption(InputStream input, OutputStream output)
            throws IOException
    {
        output = new CipherOutputStream(output, encrypt);
        //calling the writeBytes() method to write the encrypted bytes to the file
        writeBytes(input, output);
    }
    //method for decryption
    private static void decryption(InputStream input, OutputStream output)
            throws IOException
    {
        input = new CipherInputStream(input, decrypt);
        //calling the writeBytes() method to write the decrypted bytes to the file
        writeBytes(input, output);
    }
    //method for writting bytes to the files
    private static void writeBytes(InputStream input, OutputStream output)
            throws IOException
    {
        byte[] writeBuffer = new byte[512];
        int readBytes;
        while ((readBytes = input.read(writeBuffer)) >= 0)
        {
            output.write(writeBuffer, 0, readBytes);
        }

        //closing the output stream
        output.close();
        //closing the input stream
        input.close();
    }

} ```
您正在对
encrypt()
方法中的密文进行base64编码,那么问题出在哪里?