Ошибка при расшифровке зашифрованного содержимого файла - PullRequest
0 голосов
/ 17 апреля 2019

Я разрабатываю программу для шифрования и дешифрования, шифрование работает нормально, но дешифрование выдает ошибку. Я не могу найти, в чем проблема в этом коде ??

key.txt
ssshhhhhhhhhhh!!!!

plaintext.txt
naddarbhatia.com





public class hello {

private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey)
{
    MessageDigest sha = null;
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-1");
        key = sha.digest(key);
        key = Arrays.copyOf(key, 16);
        secretKey = new SecretKeySpec(key, "AES");
    }
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

public static String encrypt(String strToEncrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
    }
    catch (Exception e)
    {
        System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
}

public static String decrypt(String strToDecrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    }
    catch (Exception e)
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

static String readFile(String path, Charset encoding) 
          throws IOException 
        {
          byte[] encoded = Files.readAllBytes(Paths.get(path));
          return new String(encoded, encoding);
        }




public static void main(String[] args) throws IOException
{


    String en_de_flag = args[0];

    String secretKey="";
    try {
        secretKey = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/key.txt",StandardCharsets.UTF_8);
        //System.out.println(secretKey);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    String originalString="";
    String encryptedString="";

    try {
        originalString = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/plaintext.txt",StandardCharsets.UTF_8);
    } catch (IOException e) {

        e.printStackTrace();
    }


    if(en_de_flag.equals("0")) {

        encryptedString = hello.encrypt(originalString, secretKey) ;
        PrintWriter out = new PrintWriter("encrypt.txt");
        out.println(encryptedString);
        System.out.println("Encrypted File Generated !! 'encrypt.txt' , Please check now");
        out.close();
    }

    if(en_de_flag.equals("1")) {

        String decryptedFileContent = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/encrypt.txt",StandardCharsets.UTF_8);

        System.out.println("decryptedFileContent:" + decryptedFileContent);
        System.out.println("Secret Key:" + secretKey);

        String decryptedString = hello.decrypt(decryptedFileContent, secretKey) ;
        //System.out.println("Read Encrypted File, Now Decrypting..");
        //System.out.println(decryptedString);
    }


}}


STACKTRACE

java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 44
    at java.base/java.util.Base64$Decoder.decode0(Base64.java:771)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:535)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:558)
    at hello.decrypt(hello.java:63)
    at hello.main(hello.java:12

8)

При выполнении приведенного выше кода в командной строке с аргументом «0» будет создан файл encrypt.txt с зашифрованным содержимым, а после этого, когда я введу аргумент как «1», он читает зашифрованный файл «encrypt.txt» 'и' key.txt 'и вызывает функцию дешифрования, когда происходит сбой той же самой функции, pl help

1 Ответ

1 голос
/ 17 апреля 2019

Эта ошибка генерируется декодером Base64, потому что ваш зашифрованный текст заканчивается символом конца строки, записываемым PrintWriter.

Просто .trim() вашим decryptedFileContent (который фактически является зашифрованным содержимым файла ...) удалить разрыв строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...