2017-06-02 2 views
0

J'ai cette exception dans Android bien que j'ai téléchargé la politique JCE illimitée et j'ai ajouté le lib bcprov. Aussi j'ai ajouté la ligne:java.security.NoSuchAlgorithmException: aucun algorithme de ce type: ECDH pour le fournisseur BC

Security.addProvider(new BouncyCastleProvider()); 

S'il vous plaît aidez-moi à savoir ce qui manque. J'ai lu d'autres messages et j'ai trouvé qu'ils ont fait ce qui précède. Les accidents d'application à loadprivatekey, dans la ligne:

ECParameterSpec params = ECNamedCurveTable.getParameterSpec(CurveName);) 

qui est appelée à partir de la fonction doECDH

public static PrivateKey loadPrivateKey (byte [] data) throws Exception 
    { 
    Security.addProvider(new BouncyCastleProvider()); 
    ECParameterSpec params = ECNamedCurveTable.getParameterSpec(CurveName); 
    ECPrivateKeySpec prvkey = new ECPrivateKeySpec(new BigInteger(data), 
    params); 
    KeyFactory kf = KeyFactory.getInstance("ECDH", "BC"); 
    return kf.generatePrivate(prvkey); 
} 

public static String doECDH (String data_Prv, String data_Pub) throws Exception 
{ 
    byte[] dataPrv = hexToBytes(data_Prv); 
    byte[] dataPub = hexToBytes(data_Pub); 
    KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC"); 
    ka.init(loadPrivateKey(dataPrv)); 
    ka.doPhase(loadPublicKey(dataPub), true); 
    byte [] secret = ka.generateSecret(); 
    Shared_Key = bytesToHex(secret); 
    //SecretKey originalKey = new SecretKeySpec(secret, 0, secret.length, "ECDH"); 
    return Shared_Key; 
} 
+0

Afficher le code où vous initialisez – shmakova

+0

ECDH Quelle est votre version BouncyCastle? Et quelles bibliothèques utilisez-vous (bcprov, bcmail, etc)? –

+0

bcprov-jdk15on-157 –

Répondre

0

Essayez d'utiliser spongycastle, ajoutez à votre build.gradle:

compile 'com.madgag.spongycastle:core:1.54.0.0' 
compile 'com.madgag.spongycastle:prov:1.54.0.0' 
compile 'com.madgag.spongycastle:pkix:1.54.0.0' 
compile 'com.madgag.spongycastle:pg:1.54.0.0' 

Ajoutez ce code:

static { 
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); 
} 

Et utilisez ceci:

KeyFactory kf = KeyFactory.getInstance("ECDH", "SC"); 

et ceci:

KeyAgreement ka = KeyAgreement.getInstance("ECDH", "SC");