Привет, я пытаюсь реализовать код, предоставленный anindonesian в Flexiprovider - How to encrypt/de with formatted keypair на Android.Ошибка генерации ключа ECC
Я получаю исключение NullPointerException для kpg.initialize (brainpoolP160R1);
Я новичок в Android и криптографии, поэтому любая помощь будет оценена по достоинству. Здесь я только что создал страницу, которая генерирует ключ ECC и шифрует/дешифрует некоторые данные и отображает их в текстовом поле.
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.spec.ECGenParameterSpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
public class ECC_page extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ecc_page);
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator kpg = null;
try {
kpg = KeyPairGenerator.getInstance("ECIES", "BC");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
e.printStackTrace();
}
ECGenParameterSpec brainpoolP160R1 = new ECGenParameterSpec("brainpoolP160R1");
try {
assert kpg != null;
kpg.initialize(brainpoolP160R1); //I am getting the error here
} catch (InvalidAlgorithmParameterException ignored) {
}
KeyPair kp = kpg.generateKeyPair();
PublicKey publicKey = kp.getPublic();
PrivateKey privateKey = kp.getPrivate();
byte[] PublicKey = publicKey.getEncoded();
byte[] PrivateKey = privateKey.getEncoded();
Cipher c = null;
try {
c = Cipher.getInstance("ECIESWithAES/DHAES/NoPadding", "BC");
} catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) {
e.printStackTrace();
}
try {
c.init(Cipher.ENCRYPT_MODE, publicKey);
} catch (InvalidKeyException e) {
e.printStackTrace();
}
byte[] cipher = new byte[0];
try {
cipher = c.doFinal("This is the message".getBytes());
} catch (IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}
TextView eccencoded = (TextView) findViewById(R.id.eccencoded);
eccencoded.setText("[ENCODED]:\n" +
Base64.encodeToString(cipher, Base64.DEFAULT) + "\n");
try {
c.init(Cipher.DECRYPT_MODE, privateKey);
} catch (InvalidKeyException e) {
e.printStackTrace();
}
byte[] plaintext = new byte[0];
try {
plaintext = c.doFinal(cipher);
} catch (IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}
TextView eccdecoded = (TextView) findViewById(R.id.eccdecoded);
eccdecoded.setText("[DECODED]:\n" +
Base64.encodeToString(plaintext, Base64.DEFAULT) + "\n");
}
}
Я вставил ApacheDS-все-1.5.5.jar в моей папке ЛИЭС ..
Ошибка java.security.NoSuchAlgorithmException: осуществление KeyPairGenerator ECIES не найдено Вызванные: java.lang.NullPointerException в com.example.vinay.myapplication.ECC_page.onCreate (ECC_page.java:47)
Также, пожалуйста, указать на ошибки в коде, если это возможно ... сосуд файл InSe rt был предложен андроид-студией.
Я использую надувной замок сам, а не FlexiProvider. В ссылке, которую я упомянул, есть ответ с реализацией Bouncy Castle. Не могли бы вы также сказать мне ответ с точки зрения самонадеянного замка? Также есть ли файл jar, который я вставил правильно? –
Это было не так ясно из контекста. Нет, этот .jar неверен, это, скорее всего, Apache Directory Service .jar (по крайней мере, если я правильно помню). Вам нужен Загородный замок или Спанговый замок. Кроме того, вам необходимо зарегистрировать поставщика. Код Bouncy Castle не содержит слишком много информации, но я уверен, что установка объясняется. –