Я следую этой теме, чтобы зашифровать мой файл на моем компьютере:
https://gist.github.com/dreikanter/c7e85598664901afae03fedff308736b
Поэтому я выполняю команду theses:
openssl genrsa -aes256 -out private.pem 8912
openssl rsa -in private.pem -pubout -out public.pem
openssl req -x509 -new -days 100000 -key private.pem -out certificate.pem
ENCRYPTION------------------------------ :
openssl smime -encrypt -binary -aes-256-cbc -in config_auto.json -out config_auto.dat -outform DER certificate.pem
Затем я реализую этот код, но это не работает:
public byte [] decryptRSA (byte [] data) генерирует исключение NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, ClassNotFoundException, 1011
BigInteger m = new BigInteger(getKeyParams()[0],16);
BigInteger e = new BigInteger(getKeyParams()[1],16);
KeyFactory keyFactory2 = null;
RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(m, e);
RSAPrivateKey privatekey = null;
try {
keyFactory2 = KeyFactory.getInstance("RSA");
privatekey = (RSAPrivateKey) keyFactory2.generatePrivate(privateKeySpec);
Cipher c2 = Cipher.getInstance("AES/CBC/PKCS5Padding"));
c2.init(Cipher.DECRYPT_MODE,privatekey);
byte[] decryptedData = c2.doFinal(data);
return decryptedData;
} catch (IllegalBlockSizeException | BadPaddingException | InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException err) {
err.printStackTrace();
}
return null;
}
1012
исключениефайл .cpp:
extern "C"
JNIEXPORT jobjectArray JNICALL
Java_mypackage_JNIHelper_getKeyParams(JNIEnv *env, jobject instance) {
jobjectArray valueArray = (jobjectArray) env->NewObjectArray(2, env->FindClass("java/lang/String"), 0);
const char *hash[2];
//MODULUS
hash[0] = "00b55984ae86b1ff2276802ea8eca62a68848c3cb7606ae2143ba652c3b9312fc2733f4fdb1e338ceb38cb9cecc6fcdd312d5661bba359c152f1ef5feab2db3b70f145dc29803242dabf66";
//EXPONENT
hash[1] = "7c1df677546cc2879dbf0130503731d332d4a0418955ddc1a749a05fa0820f83f048a6a8fb34a0ffe47146c7af31255a21037c04663a69dc11059a0a11bb8625389c6da061c3048a9e70c1";
for (int i = 0; i < 2; i++) {
jstring value = env->NewStringUTF(hash[i]);
env->SetObjectArrayElement(valueArray, i, value);
}
return valueArray;
}
MODULUS и Exponent получаются командой theses на моем компьютере:
PBKEY_INFO=`openssl rsa -in private.pem -text -noout`
MODULUS=`echo "$PBKEY_INFO" | grep Modulus: -A 5 | tail -5`
echo `echo $MODULUS | tr -cd [:alnum:]`
PREXP=`echo "$PRKEY_INFO" | grep privateExponent: -A 5 | tail -5`
echo `echo $PREXP | tr -cd [:alnum:]`
Что не так в моем коде, пожалуйста?
byte [] decryptedData имеет нулевое значение в конце
, и я получаю следующие следы: java.security.InvalidKeyException: ключ для алгоритма RSA не подходит для симметричного шифрования.
Спасибо.