SAML2.0 Assertion decrypt - java

I'm trying to integrate an Java Web App with an deploied IdP at my school. The IdP is already configured, I make the request and everything is fine, except one. I can't decrypt the IdP response.
Here you can find the response that I receive after a login
I have a public_key.crt and a private_key.pem.
I already have decrypted the symetric key inside the IdP response, that was encrypted with my public_key.crt. After that I get a 256 bytes array, wich I think is an AES-256 passphrase, but the IdP Response only talks about an AES-128-CBC. Nevertheless I try to create an Java AES object to decrypt the SAML Assertion, but I always get the error: Invalid AES key length: 256 bytes
Here is the code:
PrivateKey privKey = ...; // PrivateKey constructed with my private_key.pem file
System.out.println(privKey); // To show private_key.pem info
// you can find these two strings on IdP Response, from link above
String encAssertion = "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";
String encryptedKey = "qJNLI5UNAVSVwRCI8EHSa5GuhFAxPi9VZleCCrriLHSXWHf79RDG6ocU7slHZaf8zvIc2su41iJsZeb3xXOsg73xbJ2vLOWW5GQCRh97OxFmbd2M0UkYMM57g2YmDlPjTo7L75GrX2LmmL1ko47QmCb60b0um2m6RGNdj32QUIGArUM4TUdamSi0a8+bThe565OUkS25OfrT02z1er1m+VprUa5SPwqLXRqmg9dknCX8pIi5vrD02bRrKP5b+a6FTA77ocOFtYgzPQWPYfAU5jFledHRJA3phwsm7yOFvyjOeWtOVCAKmoYALJ+5rdxnkMGr/SGaI3jjNup7WQJxtw==";
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] decrypt = cipher.doFinal(Base64.decodeBase64(encryptedKey));
System.out.println("Decrypted Key length: " + decrypt.length); // Decrypted Key length: 256
System.out.println(new String(decrypt, "UTF-8")); // Some stupid chars
SecretKey skeySpec = new SecretKeySpec(decrypt, "AES");
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// cipher = Cipher.getInstance("AES/CBC/NoPadding");
// cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, (Key) skeySpec);
byte[] decryptedAssertion = cipher.doFinal(encAssertion.getBytes());
The error occurs on the last line.
Invalid AES key length: 256 bytes

Related

How to decrypt an AES encrypted string while having only the secret key

I am consuming a SOAP API that sends a response that is encrypted with AES. I too have the secret key from the API provider. However I am a bit confused on how to decrypt the response.
All guides that describe how I can decrypt the message tell me I need SecretKeySpec when using javax.crypto.Cipher. However I have no idea what is actually expected there?
Here is an example what I am trying to do:
final String encryptedResponse = "F9nwhTquiEcRY3wfwCGVH1yvZ1fl28VnBXQ3vo6fyCzdV0MnOmeeHg8ea/7c/9ZT0AeEywnR06r5eUoeq4Swf/bFIixc9JJEYB7/fJ0h6I7blQbiOuks7QOUBoSMNaAum1NYTgTm0MHbM3GYLHDPlb8PkBFTL0XxZalKqcqRuhr3BQxPfITeSXjqSvPvy5Wt1Jq";
final String secretKey = "ijsdfgDJJff42h3412";
BASE64Decoder myDecoder = new BASE64Decoder();
byte[] crypted = myDecoder.decodeBuffer(secretKey);
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] cipherData = cipher.doFinal(crypted);
String decryptedResponse = new String(cipherData);
here I receive the following error
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
The key length should be 16,get the true key first;
mayby the key length should be 16,get the true key first;

AES cypher in GCM mode with null byte IV in java

I have to encrypt a json payload using AES cypher in GCM mode with null byte IV.
When i tried using the secret key and the json payload, i am getting a different result than expected. It only mismatches with AES GCM MAC part.
These are the parameters and my source code:
GCM_TAG_LENGTH= 16,
Symmetric key In Hex: 083080D3D0C521C02CD3AE2134363D09EA50DFF914677FAB9E22F18F9C28A3B9
jsonPayload:{"Parameter1":"Value1","Parameter2":"Value2","Parameter3":"Value3"}
OutPut (Expected): EF6BA2FFA05B6985FE129E3CB6845C4EA1E94AE98D31A538A4E24906FB720D764D640894CD9 DE7CEC00114396651A1CCAEDCF480C57A959E925C04492B9CF85FC711FAB3CBED10DC2BA99A2B B063CEFF8DE1
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(secretkey, "AES");
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(Integer.valueOf(WalletStaticTypes.GCM_TAG_LENGTH.getType()) * 8,newbyte[12]);
cipher.init(Cipher.ENCRYPT_MODE, keySpec,gcmParameterSpec);
byte[] encryptedPayLoad = cipher.doFinal(jsonPayload.getBytes("UTF-8"));
Hex.encodeHexString(encryptedPayLoad,false);
I noticed that this is about the Apple Pay integration, I managed to achieve the same results from the test documentation using
GCMParameterSpec(128, ByteArray(12))
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
cipher.init(Cipher.ENCRYPT_MODE, finalKey, GCMParameterSpec(128, ByteArray(12)))
// AES Key
083080D3D0C521C02CD3AE2134363D09EA50DFF914677FAB9E22F18F9C28A3B9
// JSON Payload (67 bytes), UTF-8 encoded: {"Parameter1":"Value1","Parameter2":"Value2","Parameter3":"Value3"}
Output:
E3EF6BA2FFA05B6985FE129E3CB6845C4EA1E94AE98D31A538A4E24906FB720D764D640894CD9DE7CEC00114396651A1CCAEDCF480C57A959E925C04492B9CF85FC711FAB3CBED10DC2BA99A2BB063CEFF8DE1

AES encryp-decrypt is not working properly --Android

I want to encrypt an arbitrary text with RSA, but as I read, RSA dont allow to long texts, so firsts, I need to encrypt with AES-256 (for example), then encrypt the AES key with RSA public, add the encrypted text(with AES), and send the message.
At this moment, I'm doing the AES enc-dec. But I'm doing something wrong because is not decrypting the message properly:
First I generate the AES Key:
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(KEY_SIZE_AES);
this.secretKey_AES = keyGenerator.generateKey();
return this.secretKey_AES;
then I encrypt the message:
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey_AES);
byte[] encrypted = cipher.doFinal(message.getBytes("UTF-8"));
String encryptedMessage = Base64.encodeToString(encrypted, Base64.DEFAULT);
return encryptedMessage;
and finally I decrypt it:
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey_AES);
byte[] decrypted = cipher.doFinal(Base64.decode(message,Base64.DEFAULT));
String decryptedMessage = new String(Base64.encode(decrypted, Base64.DEFAULT));
return decryptedMessage;
But the decrypted text is not the same as the original. I'm missing somthing?
Or I forget some step?
Example:
Your code is working properly, but you are encoding the result in BASE64. ("Elias" is "RWxpYXM" in base64). Just change
String decryptedMessage = new String(Base64.encode(decrypted, Base64.DEFAULT));
with
String decryptedMessage = new String(decrypted, "UTF-8");
Note that this method will only work for text strings

AES -256 decryption

I have an encrypted email id for unsubscribing from abcde.test.com.
for ex : https://abcde.test.com/Forms/unSubscribe.jsp?n=2&rid=00028e7353d9c4eca480a579e10ef09b&eid=588876054d458e62779be9345f399252cac7346ad8c464b8ed0bdfbff3512dd96a5b4190c5d71c30c90c34ff39e544aa
This is encrypted in aes-256.where eid="encrypted message" and rid when combined with keysize,and keystr (like "6a6b663472346c38736873346569727538346234333534376635333962353666") forms the encoded key.
Now I want to decrypt this message.
can any one help me decrypting it?
Try the following using Java SE and Apache Commons. Please note that you haven't indicated the mode or padding for your cipher (just "AES"), so you might need to make some adjustments.
// decode the key string into bytes (using Apache Commons)
byte[] keyBytes = Hex.decodeHex(keystr.toCharArray());
// create a representation of the key
SecretKeySpec spec = new SecretKeySpec(keyBytes, "AES");
// turn the key spec into a usable key
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("AES");
SecretKey key = keyFactory.generateSecret(spec);
// use a cipher to decrypt the eid
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainText = cipher.doFinal(hex.decodeHex(eid.toCharArray())); // decode from Hex again
I don't know what type eid represents, so turning that into something concrete is up to you, but here's an example:
String eid = new String(plainText, "ASCII");

convert byte[] to AES key

i have a AESkey which encrypted by a public key, and later decrypted by a private key
Cipher cipher = Cipher.getInstance("RSA");
PrivateKey privateKey = keyPair.getPrivate();
// decrypt the ciphertext using the private key
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedText = cipher.doFinal(theBytes);
theBytes is a byte[] containing a encrypted AESkey, the question is how to convert the decryptedText back to the AESkey?
I believe you're receiving an RSA-encrypted AES key along with some AES-encrypted data, and you still need to perform the second of 2 encryptions. Right?
So, anyway, you can load a key from the byte array.
SecretKeySpec secretKeySpec = new SecretKeySpec(decryptedText, "AES");
Subsequently you'd do something like this, to decrypt the AES-encrypted data, 'encrypted':
Cipher cipherAes = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipherAes.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decryptedBytes = cipherAes.doFinal(encrypted);
String decryptedString = new String(decryptedBytes);
The /CBC/PKCS7Padding specification may vary, depending on how it was specified during encryption.
Hope this helps.

Categories