Я новичок в 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.