Я получаю ошибку 1 га sh несоответствия в бэкэнде при попытке расшифровать зашифрованный текст в android интерфейсе.
Frontend Android Kotlin код для шифрования:
fun encrypt(message: String): String {
val key = "generated public key"
val encryptedBytes: ByteArray
val pubKey: PublicKey? = key.toPublicKey()
val cipher: Cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA512ANDMGF1PADDING")
cipher.init(Cipher.ENCRYPT_MODE, pubKey)
encryptedBytes = cipher.doFinal(message.toByteArray())
return Base64.encodeToString(encryptedBytes, Base64.DEFAULT)
}
fun String.toPublicKey(): PublicKey {
val CRYPTO_METHOD = "RSA"
val keyBytes: ByteArray = Base64.decode(this, Base64.DEFAULT)
val spec = X509EncodedKeySpec(keyBytes)
val keyFactory = KeyFactory.getInstance(CRYPTO_METHOD)
return keyFactory.generatePublic(spec)
}
Backend java код для расшифровки:
public static String rsaDecrypt(String algorithm, byte[] encryptedMessage, Key privateKey) throws Exception {
Cipher c = Cipher.getInstance(RSA/ECB/OAEPWITHSHA512ANDMGF1PADDING) ;
c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] plainText = c.doFinal(encryptedMessage);
return new String(plainText);
}
public static PrivateKey getPrivateKeyFromString(String key) throws Exception {
BASE64Decoder b64 = new BASE64Decoder();
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec publicKeySpec = new PKCS8EncodedKeySpec(b64.decodeBuffer(key));
PrivateKey publicKey = keyFactory.generatePrivate(publicKeySpec);
return publicKey;
}