Java RSA Decryption javax.crypto.illegalblocksizexception: данные не должны быть длиннее 256 байтовJAVA

Программисты JAVA общаются здесь
Anonymous
Java RSA Decryption javax.crypto.illegalblocksizexception: данные не должны быть длиннее 256 байтов

Сообщение Anonymous »

Небольшой вопрос Decryption с Java, пожалуйста. < /p>
Я хочу встретиться в секретном месте с моим другом. Обратите внимание, я сгенерировал обе строки. < /P>
String privateKeyString = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6cXloNrocJ8s[...]LABviZm5AFCQWfke4LZo5mOS10";
String publicKeyString = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB[...]EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGwIDAQAB";
< /code>
Я затем публично поделился своим открытым ключом к своему другу, который написал это: < /p>
private static String encryptSecretLocation(String secretLocation) {
try {
String publicKeyString = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB[...]EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGwIDAQAB"; //public key same as above
byte[] buffer = Base64.getDecoder().decode(publicKeyString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Cipher encryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] secretMessageBytes = secretLocation.getBytes(StandardCharsets.UTF_8);
byte[] encryptedMessageBytes = encryptCipher.doFinal(secretMessageBytes);
return Base64.getEncoder().encodeToString(encryptedMessageBytes);
} catch (NoSuchAlgorithmException | InvalidKeyException | InvalidKeySpecException | NoSuchPaddingException | IllegalBlockSizeException | BadPaddingException e) {
return "bad location";
}
}
< /code>
И действительно, ему удалось получить какую -то тампу, которую он отправил мне обратно < /p>
"OixtTJRXe2nDRWDBqSs9m4wN[...]17/MKpw=="
< /code>
Через хорошую букву: < /p>
Hey, meet me at (decrypt this)

"OixtTJRXe2nDRWDBqSs9m4wN[...]17/MKpw=="

I will wait for you there tomorrow at noon! Please come alone!
< /code>
У меня есть личный ключ, которым я ни с кем не поделился, и надеялся вычислить секретное место с этим кусочком кода, это то, что я попробовал. < /p>
public static void main(String[] args) throws Exception {
String privateKeyString = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6cXloNrocJ8s[...]LABviZm5AFCQWfke4LZo5mOS10";
String publicKeyString = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB[...]EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGwIDAQAB";

byte[] buffer1 = Base64.getDecoder().decode(privateKeyString);
PKCS8EncodedKeySpec keySpec1 = new PKCS8EncodedKeySpec(buffer1);
KeyFactory keyFactory1 = KeyFactory.getInstance("RSA");
PrivateKey privateKey = (RSAPrivateKey) keyFactory1.generatePrivate(keySpec1);

Cipher decryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);

byte[] decryptedMessageBytes = decryptCipher.doFinal("OixtTJRXe2nDRWDBqSs9m4wN[...]17/MKpw==".getBytes(StandardCharsets.UTF_8));
String decryptedMessage = new String(decryptedMessageBytes, StandardCharsets.UTF_8);

System.out.println(decryptedMessage);
}
< /code>
К сожалению, все, что я получаю, это: < /p>
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes
at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:347)
at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
< /code>
Могу я спросить, в чем проблема и как вычислить секретное местоположение нашей встречи, пожалуйста? Пытался сделать вопрос интересным, надеюсь, вам понравилось!

Подробнее здесь: https://stackoverflow.com/questions/712 ... not-be-lon

Вернуться в «JAVA»