Как написать Cipher.getInstance(«DES»); в jni?

#android #java-native-interface

#Android #java-native-интерфейс

Вопрос:

Я хотел бы изменить

 Cipher cipher = Cipher.getInstance("DES"); 
  

в cpp-код в jni.Как это сделать?

Ответ №1:

 JNIEnv *jni; //Comes from somewhere
jclass cl = jni->FindClass("javax/crypto/Cipher");
jmethodID MID = jni->GetStaticMethodID(cl, "getInstance", "(Ljava/lang/String)Ljavax/crypto/Cipher;");
jstring s = jni->NewStringUTF("DES");
jobject cipher = jni->CallStaticObjectMethod(cl, MID, s);
  

Это исключает обработку ошибок.

Комментарии:

1. Большое вам спасибо! Я допускаю ошибку, когда пишу CallStaticObjectMethod(cl, MID, s) в CallObjectMethod(cl, MID, s) .

Ответ №2:

Другой альтернативой было бы использовать собственный код для шифрования, например, OpenSSL.

Обязательное предупреждение: не используйте DES.

Комментарии:

1. Потому что ключ довольно короткий и может быть грубо введен менее чем за день. Плюс есть более эффективные атаки.