Расшифровка Java AES с помощью ключевой фразы - PullRequest
1 голос
/ 18 октября 2019

Я новичок в Java и шифровании. Я пытаюсь выяснить, как расшифровать строку base64, используя 36-битную строку GUID в качестве секрета. Как я понимаю, мне нужно преобразовать кодовую фразу GUID в 256-битный ключ, чтобы это работало? Может ли кто-нибудь указать мне правильное направление, как это сделать? Я попробовал некоторый стандартный код расшифровки AES, как показано ниже, но я получаю ошибку javax.crypto.BadPaddingException: Given final block not properly padded.

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)), "UTF-8");
    } 
    catch (Exception e) 
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

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();
    }
}

ОБНОВЛЕНИЕ Так что после дальнейшего копания строка шифруется с использованием crypto-jsбиблиотека с функцией шифрования AES по умолчанию. Этот вопрос содержит пример для расшифровки и хорошее объяснение того, как crypto-js шифрует с AES.

...