Код: Выделить всё
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class Cipher {
private static final byte[] pub = Base64.getDecoder().decode("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCMU67g985laZbW42c9MBX9zV6OBZMM1c/PyBQSdQfG+dMsQpwhxwkIYpmChZeU7VUewQMwqIh+Y3KKz32npMgMUbqNS+8X1aAPqqDIL66vXXpj+VR/8P4bTSz3Qd1tl3UUqFaqOvBbOXOcpXThnOF5TR95O0xxhWoDElb5UhpmwIDAQAB");
private static final byte[] pri = Base64.getDecoder().decode("MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIIxTruD3zmVpltbjZz0wFf3NXo4FkwzVz8/IFBJ1B8b50yxCnCHHCQhimYKFl5TtVR7BAzCoiH5jcorPfaekyAxRuo1L7xfVoA+qoMgvrq9demP5VH/w/htNLPdB3W2XdRSoVqo68Fs5c5yldOGc4XlNH3k7THGFagMSVvlSGmbAgMBAAECgYAtJnxve2RGzCdNN4r9C8RIvWrGX/0boBJ51KKYNYJi54Jnjl5YeALCZP9iM81eGRmhmqfk5PrlXW5W1ng+tu++k08wEwlGdBcE4TlFC+BdwSMiplarsrDbVAOcAaOuv0KgZKu5iqb0dgHW1+fKo/Xb+c1X6AG6sTNGd49X1feFgQJBAMXXOY2wind1gKXEdK8LvMXdq6JJi9dFxC6DlWytcW8UR1gKA369lyvL7s6zEhq+sNL05bXJbzJ4PWTtnY2nO1kCQQCodyGJNHpLBwN4HqoYP/6UvCcdK9XpdJWwJrYIjKdXwwWNg0QrhsCXLKbaDoUYcJ7UVB6/NKuQ2Cvn5rLWsNITAkEAjkDSFkpRVdH8XbUjvVWwN4nLRpahYXm9tUBR6eHQhXFMV0Zj+vaxwwEQxjlGFEr288i5fvvG48BHTNH6DoeniQJAWGFXeLHNTrs5OLVtqxc3qjQjmQw8RyPgu+8zJL0VtdccfKdXBjbFpwnH5zIi5TWAPgh7sPgi4fRm5FyFilhtfQJAMP3aMAcRjowXmreQqvVSCBQ2DIhxCAdibRFb1tBZP+wMNK56ghxVJyyozFHKGRxAhQdyaS3dFpXroTHD2pISIQ==");
public static String decrypt(String encryptedText) {
try {
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(pri);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, privateKey);
return new String(cipher.doFinal(Base64.getDecoder().decode(encryptedText)));
} catch (Exception e) {
e.printStackTrace();
return "Failed";
}
}
public static void main(String[] args) {
String encryptedText = loadFullContentFromFile("encrypted.xml");
if (encryptedText != null) {
System.out.println("Encrypted: " + encryptedText);
System.out.println("Decrypted: " + Cipher.decrypt(encryptedText));
} else {
System.out.println("Failed to read the encrypted content from file.");
}
}
private static String loadFullContentFromFile(String fileName) {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
return content.toString();
}
}
Мой контент в формате .XML выглядит так:
ßn
lf.O ¸Ñ¬Eq sNMF[\ØùÚO“€¥¨fÁd÷X,ÀÇœ˘∑yì"ËîºÖÿaøòíÖÇr3°aˆ
5dé!ˆç]Èú:@ÏÚÈ\¬åò#£¢Úûm ∞ÖÎ CÉ>)Iû\À€πÉmÑ+ÊôÃ}........ и т.д.
Затем закодировал в формат base64 и получил следующее:
Код: Выделить всё
w59uCgxsZi5PwrjDkcKsRXEgA3NOTUYWW1wbw5jDucOaT+KAnOKCrMKlwqhmw4Fkw7dYLMOAw4fFk8uY4oiRecOsIgLDi8OuwrrDlsO/YcO4w7LDrcOWw4dyMx3CsGHLhgo1ZMOpFCHLhsOnf13DiMO6OkDDjxTDmhDDiFzCrMOlw7IaI8KjwqLDmsO7beKInsOWw44JQ8OJPilJw7tcw4DigqzPgMOJbRbDkSsFw4rDtMODfR4X4omkRkPDmMOqIxslDsOoQVHDjSVVV8uYfVkmHHXCr8OLEyvigJNf76yCA8uGeDsKQc6p76yBwqjihKI94oSiIwg3H8uH4oSiN8Ou4omkwrbiiI/Dj8OYwqDiiaRKVkniiJHDq0TCqsKow5Rpwqdc4oCdH+KAmCjiiJpOw6DDsj3LncOiy5rigKHigJzCsD1pw6rDps6pDMKhHEjDn8OlTsK4IkLFksuHw6Qh4oml4oCUL8Oq4oC5H0JIP3DCpTxew4PDoDHDusO4xZPCtBrCrOKApjfDt+KJoHB0Vgdgw5HDluKAnW7igLkTw4xNw47iiJrDoeKIj8K64omgasODaMO8VlVndTUeTHbigLrCt+KIhgFgRkcUXDPDi1DDucKodyYVFHEhHEviiILDjHRsy4ZoasO2Vz0PTsOkGCkZbsO/LwJvwqNk4oCicCjDpjF1w7vCsUzigqxNS8KoMinCuA8s76yBy5tJ4oC5JMuby4ZXMyjDjcucVsOLwr82wq84MD/Dk8OKw5MoxpLiiKvigJgjOcOS4oC64oCY4oiCy5nvrIFkTl5nw654w4DCpUcP4oiRy4bDrcOqIgw9w6figqzDjiE1O8OPbcORVEPDtTnLmQxoCSsXw7JbX8KvTT01PANnYhwIXsK1UQJGFcONwrbiiaR6wqzDhWzDuXriiJ7OqUc+4omIy5rDpw7DsQDCp8KrS+KEojF+OMOGQcKv4peKfOKAuuKJoG/DtMudw6rCocKoxLHDrzrFk8O64oiPw7PCtsOm4peKwqo4w40MwrVdwqzigJg=
Код: Выделить всё
javax.crypto.IllegalBlockSizeException: Data must not be longer than 128 bytes
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:349)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:423)
at javax.crypto.Cipher.doFinal(Cipher.java:2168)
at Cipher.decrypt(Cipher.java:37)
at Cipher.main(Cipher.java:48)
- Пытался найти ключ AES, как асимметричное шифрование, но безуспешно< /li>
Пытался просмотреть файлы .jar, но не смог найти окончательную логику для расшифровки.
Подробнее здесь: https://stackoverflow.com/questions/791 ... rivate-key