Я пытаюсь использовать AESKey, сделанные на JavaCard 2.2.1 в приложении Java Как я сделать AESKEY:AES ключ от JavaCard к Java, шифрования
RandomData randomData = RandomData.getInstance(RandomData.ALG_PSEUDO_RANDOM);
byte[] rnd = JCSystem.makeTransientByteArray((short)16, JCSystem.CLEAR_ON_RESET);
randomData.generateData(rnd, (short)0, (short)rnd.length);
AESKey symKey = (AESKey) KeyBuilder.buildKey (KeyBuilder.TYPE_AES, KeyBuilder.LENGTH_AES_128, false);
symKey.setKey(rnd, (short)0);
Как я шифровать данные:
Cipher symCipher = Cipher.getInstance(Cipher.ALG_AES_BLOCK_128_CBC_NOPAD, false);
symCipher.init(symKey, Cipher.MODE_ENCRYPT);
byte[] encryptedC= new byte[48];
symCipher.doFinal(c, (short)0, (short)c.length, encryptedC, (short)0);
После этого я отправляю rnd в свое приложение java и пытаюсь сделать ключ с ним.
SecretKeySpec secretKeySpec = new SecretKeySpec(symKeyData, "AES");
Я знаю, что SymKeyData == rnd. Я могу использовать этот SecretKey зашифровать что-то, но когда я расшифровать я получаю сообщение об ошибке: «Учитывая последний блок не правильно проложенный»
Cipher cipherAes = Cipher.getInstance("AES");
cipherAes.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decryptedBytes = cipherAes.doFinal(challengeEncrypted);
Я проверил и challengeEncrypted является хорошей длиной (48) Пробовал с:
Cipher cipherAes = Cipher.getInstance("AES/CBC/NoPadding");
Но нет Сукчес, исключение: "неправильный ключ"
НАЙДЕНО РЕШЕНИЕ
byte[] ivdata = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
IvParameterSpec spec = new IvParameterSpec(ivdata);
symetricKeyFromCard = new SecretKeySpec(symKeyData, "AES");
Cipher cipherAes = Cipher.getInstance("AES/CBC/NoPadding");
cipherAes.init(Cipher.DECRYPT_MODE, symetricKeyFromCard, spec);
byte[] decryptedBytes = cipherAes.doFinal(challengeEncrypted);
Примечание: криптографические ключи всегда должны быть созданы с помощью 'RandomData.ALG_SECURE_RANDOM', никогда не используйте ALG_PSEUDO_RANDOM для этого! – Robert
thx для комментария, по какой-то причине .ALG_SECURE_RANDOM всегда сбой. Не знаю, почему еще, у меня есть несколько идей. Посмотрим позже. Это работает для целей тестирования. Найдено решение, см. Сообщение. – denBelg
Обратите внимание, что вы можете ответить на свой вопрос на этом форуме. Это лучше, чем редактирование ответа на вопрос ... –