not decrypting what I crypted

后端 未结 3 1312
轻奢々
轻奢々 2020-12-16 08:57

I have a weird problem...

Basing my solution on Decrypting a hardcoded file as byte[]

So, I wrote a small Cypher class to help out with crypting/decrypting..

相关标签:
3条回答
  • 2020-12-16 09:10

    I think the problem is here:

    //opentext
    System.out.println("checking PEM...");
    crypted = Base64Coder.encode(getBytesFromFile(cryptoPEM));
    

    Previously, you wrote char[] to the file, but now you're reading a byte[] from the file and re-encoding in base64. The file's contents should already be base64-encoded!

    You need a new function called getCharsFromFile that returns char[] or String and pass that directly to decrypt2.

    0 讨论(0)
  • 2020-12-16 09:13

    After reviewing the code this morning and tweaking a little bit I got it to work.

    public static byte[] encrypt2(byte[] value) throws GeneralSecurityException, IOException
    {
        SecretKeySpec key1 = getSecretKeySpec(true);
        System.err.println("encrypt():\t" + key1.toString());
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key1, cipher.getParameters());
        byte[] encrypted = cipher.doFinal(value);
    
        SecretKeySpec key2 = getSecretKeySpec(false);
        System.err.println("encrypt():\t" + key2.toString());
        cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key2, new IvParameterSpec(getIV()));
        byte[] encrypted2 = cipher.doFinal(encrypted);
    
        return encrypted2;//Base64Coder.encode(encrypted2);
    }
    
    public static byte[] decrypt2(byte[] message, boolean A) throws GeneralSecurityException, IOException
    {
        SecretKeySpec key1 = getSecretKeySpec(false);
        System.err.println("decrypt():\t" + key1.toString());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, key1, new IvParameterSpec(getIV()));
        byte[] decrypted = cipher.doFinal(message);
    
        SecretKeySpec key2 = getSecretKeySpec(true);
        System.err.println("decrypt():\t" + key2.toString());
        cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, key2);
        byte[] decrypted2 = cipher.doFinal(decrypted);
    
        return decrypted2;
    }
    
    0 讨论(0)
  • 2020-12-16 09:21

    Any reason why you dont use the Appache Commons for this?

    http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

    0 讨论(0)
提交回复
热议问题