Я использую JUnit 4 [C: \ eclipse \ plugins \ org.junit_4.11.0.v201303080030 \ junit.jar] в сочетании с Eclipse (MARS, Версия: Mars Milestone 3 (4.5.0M3) Код сборки: 20141113-0320.junit java.security.NoSuchAlgorithmException: Не удается найти провайдера, поддерживающего
У меня есть некоторые тесты, которые проверяют простой класс и которые хорошо работают. Но теперь я пришел к тому моменту, когда хотел проверить свой класс шифрования, который реализует следующая шифровать функция:
public String encrypt(String data) {
try {
SecretKeySpec KS = new SecretKeySpec(mKeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/CBC/ZeroBytePadding"); // PKCS5Padding
cipher.init(Cipher.ENCRYPT_MODE, KS, new IvParameterSpec(mIv));
return bytesToHex(cipher.doFinal(data.getBytes()));
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return null;
}
класс Crypto не к югу классифицирован ...
public class Crypto {
Так, чтобы проверить этот класс и больше функции шифровать я разработал следующий тест блока:
package my.junit4.example;
import static org.junit.Assert.*;
import org.junit.Test;
public class CryptoTest {
@Test
public void testEncryption() {
Crypto myCrypto = new Crypto();
String encodedString = myCrypto.encrypt("Secret");
assertTrue("The decrypted encrypted word should deliver the original string", encodedString.equals(myCrypto.decrypt(encodedString)));
}
}
Этот тест неисправного с трассировки стека:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting Blowfish/CBC/ZeroBytePaddingnull
at javax.crypto.Cipher.getInstance(Cipher.java:535) at
my.junit.example.encrypt(Crypto.java:35) at
my.junit.example.CryptoTest.testEncrypt(CryptoTest.java:14) at
Это не сделать Мне очень нравится. Но, будучи относительно новым для JUnit, я подозреваю, что проблема заключается в том, что я не понимаю, как сформулировать эти тесты. В коде хорошо работает шифрование - дешифрование в моем отладчике дает мне желаемый результат. Но как я могу заставить это работать с JUnit. Какую очевидную ошибку я сделал?
Спасибо, что ответили Риком. Это интересное наблюдение. Как вы можете видеть, у меня был комментарий «// PKCS5Padding». Я изменил это на ZeroBytePadding, так как это приведет к выравниванию моего кода с типом заполнения, которое у меня есть на PHP-конце. Из реализации Blowfish я заметил, что могу ее использовать. Но формально вы правы, что в документах это не было. Но теперь за вопрос на миллион долларов (не будем давать это как награду кстати) ... как это работает в моей Java-Java и Java-PHP и только сбой при использовании JUnit ? Есть идеи? кто угодно? –
См. Ответ от @owlsetad. Он дает некоторые инструкции относительно установки поставщика. Однако это не связано с JUnit. Если вы просто создаете метод 'main' и пытаетесь использовать' encrypt', вы столкнетесь с теми же проблемами. – Rick