...
The payload of the supported APIs are is encrypted with the following method. We use AES-512 & RSA for encryption of the payload.
Summary of Steps:
...
Download the Public Key (public_key.pem) file from “Edit Flow” section.
1.) Take the valid JSON payload
...
Encode the payload using Base64 encoding. Let’s call the result “payload-B64”.
...
Generate a random string of upto 2048 characters to be used as the signature key
...
Encode that with Base64 encoding. Let’s call it “signatureKey-B64”
...
Use AES-512/ECB/PKCS5Padding encryption method to encrypt “payload-B64” with “signatureKey-B64”. Let’s call the result “payload-B64-AES”.
...
Encrypt the encoded signature key with RSA Encryption using the Public Key obtained on step 1. Let’s call it “signatureKey-B64-RSA”.
...
Send both “payload-B64-AES” and “signatureKey-B64-RSA” as parameters to the encrypted API.
Sample Example:
1. Original Sample Request Data :
. an example is given below.
Sample Example:
Code Block |
---|
{ "api-version": "1<1.0 or TEST>", "security-id": "f534794a88b87200f1fd7c6af0c09ffcf9a4abf465c09a957c22c22b00ce2221<64 character alphanumeric>", "flow-id": "BTFpAuqF<8 character alphanumeric>", "calls": [ { "client-identifier": "{% now 'iso-8601'<identifier, ''callback %}parameter>", "start-time": "{% now 'iso<ISO-8601', '' %}Format YYYY-MM-DDTHH:MM:SS+05:30", "contact-numbers": [ "918000XXXXXX", "918100XXXXXX", "6262772728<Other Alternate Numbers>" ], "keys": [ { "name": "$flow.key.customernameName", "value": "ParinJACOB" }, { "name": "$flow.key.productLanguage", "value": "Health" English" }, { // Other flow variables } ] }, { // 2nd Call to be place } ] } |
2.
...
Online site to convert normal text to base64: ) Encode the payload using Base64 encoding.
Use the following link to encode https://www.base64encodebase64decode.org/
IHsKICAidmlzaXRvciI6ICI5MTk4Nzk1ODU3MDAiLAogICJjdXN0VG9rZW4iOiAidTFkOXowM2IiLAogICJkdXJhdGlvbiI6ICI5MDAiLAogICJzY2hlZHVsZWRfY2FsbGJhY2tfdGltZSI6ICIyMDIxLTAzLTI3IDEyOjAwOjAwIiwKICAidWRmNSI6ICJST1NTRSIsCiAgInVkZjciOiAiU0NIRU1FTkFNRVNXSVRDSCBJTiIsCiAgInVkZjExIjogInBhZ2U7Uk9TU0lEO0lOVkVTVE9STkFNRTtTQ0hFTUVOQU1FO0FNT1VOVDtVTklUUztFWElUTE9BREFNVDtPdGhlcmRldGFpbHM7Rm9saW8gY291bnQ7RGV0YWlscztSZWRlbXB0aW9uZm9saW9jb3VudDtTd2l0Y2hmb2xpb2NvdW50IiwKICAidWRmMTIiOiAiUmVhc29uO0ZPTElPTk87Q1JFQVRFRE9OIiwKfQ==
3.
...
) Take a random string
...
(ex: abcd1234) of up to 2048 characters to be used as the signature key, and encode this string also using Base64 encoding.
Random Key : test1234
Base64 Encoded:: dGVzdDEyMzQ=
...
Now, You have two encoded keys, first one is your Base64 encode JSON payload and the second one is your encode the random string.
4.) You will have to write your own code for AES Encryption of your Base64 encoded JSON payload and a random string. You can take reference from this link: https://howtodoinjava.com/java/java-security/java-aes-encryption-example/ to write your code. This step will give you the RequestEncryptedValue.
AES Encryption Data :
14nZnSU51sms3Lhu60/9cuUAMsEwWIqxhj68zWWc70adIHDrS6Ad4csvQ/1X/x8EkwhKKJITcbXEv1GEFpp0mJ7a1a77LfHHUDAqRrhM7J2V38D66emu6BzDouVLf+OjZLYgl81Fi+lXLDHV3/Oc3c/w01bpM3CCQWt+kOuE8C1W8UEa6F1E5QfVwzE7EFy8U8tMvjj0twphvOKOXC0pSVWkIoUUUZiRsLRnvwZlby7GRazBLmC6rYXaY834ge2+Nsb84beI9OxIz/PDF5qUA1opYD4eLTvc1o2qr8Igu5ZlmBuqs0VQTOyntlVFjhFFSZPVCgacrbO33lnz9XP0CEUjKiV/hhfMmJrkbCfHJ8+eLyMygJE/9Abi2PPyhCql2N8/TPNH3TiTPS9z6pBkaL98BB+6YoFL6hKnt+euYjjtO5H12Ys9fh+BhPCNW9qIW+qAn1K/N6pQZnXESLtVxieK41RWSEZxP+K6IQLO56+ieFBpQ80Fyif3S18bwcZxNca5GHllagWRXg+/AhC/5ZUnc5mLtctvMLTpl8Fv+YWfHg7/qKjhIRXF7wFDodYJZFbJrBsTaF1fZPprq4PNXq7KlgoEtWnbM9oByFVLJkuHHvKzmRVWMBoJGaTS84CffqnBLKCmqvPLwepAwBAPpthWXddFjJkd8QGpZc1xIto=
Sample Link For AES Encryption: https://howtodoinjava.com/java/java-security/java-aes-encryption-example/
Note: Please use MessageDigest.getInstance("SHA-256");
5
...
.) Download the public_key.key from the Edit Flow Section.
6.) Take your Base64 encoded random key and encrypt it with RSA Encryption using the Public Key obtained in the previous step. It will give you the RequestDigitalSignatureValue.
VZATnCid3xMId80c4NVx365ubTYEEOE7y/3/sEjgKpWHyVsZmtuTuLC8ohdgunFmT8SsAYZtGydhKH9LJG6PwmYBCb+DNxdXnZ3Vrg+V+m/uA0tFp1CarEr5J5fMqN5fO9Qyb82JKk5ZamVmv0NRlMXxBi7S1hT0b85ZrpKaIX2OP6rYnDVeXDwIObj1XzvUna+sidbkHNeFJ+/m7xJONOof8Mv2FtAh65JWW/mdUzRbFCv/lBNHO7P6j6E1wNAE8UUgR7WrPusYlaw0S76yGo5p2r+mlG5/hZZMVU3ZUJvm4rP++tiZFuz1mpGjm4g2eUv6ugJ7fPyKSiFySNgX7g==
Sample Link For RAS Encryption: https://www.javainterviewpoint.com/rsa-encryption-and-decryption/
Note: Use public-key shared by phonon to encrypt key data.
...
7.) Send both “RequestEncryptedValue” and “RequestEncryptedValue” as parameters to the encrypted API.
In the end, the whole JSON Request will look like this :
{
"RequestEncryptedValue":"14nZnSU51sms3Lhu60/9cuUAMsEwWIqxhj68zWWc70adIHDrS6Ad4csvQ/1X/x8EkwhKKJITcbXEv1GEFpp0mJ7a1a77LfHHUDAqRrhM7J2V38D66emu6BzDouVLf+OjZLYgl81Fi+lXLDHV3/Oc3c/w01bpM3CCQWt+kOuE8C1W8UEa6F1E5QfVwzE7EFy8U8tMvjj0twphvOKOXC0pSVWkIoUUUZiRsLRnvwZlby7GRazBLmC6rYXaY834ge2+Nsb84beI9OxIz/PDF5qUA1opYD4eLTvc1o2qr8Igu5ZlmBuqs0VQTOyntlVFjhFFSZPVCgacrbO33lnz9XP0CEUjKiV/hhfMmJrkbCfHJ8+eLyMygJE/9Abi2PPyhCql2N8/TPNH3TiTPS9z6pBkaL98BB+6YoFL6hKnt+euYjjtO5H12Ys9fh+BhPCNW9qIW+qAn1K/N6pQZnXESLtVxieK41RWSEZxP+K6IQLO56+ieFBpQ80Fyif3S18bwcZxNca5GHllagWRXg+/AhC/5ZUnc5mLtctvMLTpl8Fv+YWfHg7/qKjhIRXF7wFDodYJZFbJrBsTaF1fZPprq4PNXq7KlgoEtWnbM9oByFVLJkuHHvKzmRVWMBoJGaTS84CffqnBLKCmqvPLwepAwBAPpthWXddFjJkd8QGpZc1xIto=",
"RequestDigitalSignatureValue":"VZATnCid3xMId80c4NVx365ubTYEEOE7y/3/sEjgKpWHyVsZmtuTuLC8ohdgunFmT8SsAYZtGydhKH9LJG6PwmYBCb+DNxdXnZ3Vrg+V+m/uA0tFp1CarEr5J5fMqN5fO9Qyb82JKk5ZamVmv0NRlMXxBi7S1hT0b85ZrpKaIX2OP6rYnDVeXDwIObj1XzvUna+sidbkHNeFJ+/m7xJONOof8Mv2FtAh65JWW/mdUzRbFCv/lBNHO7P6j6E1wNAE8UUgR7WrPusYlaw0S76yGo5p2r+mlG5/hZZMVU3ZUJvm4rP++tiZFuz1mpGjm4g2eUv6ugJ7fPyKSiFySNgX7g==",
"flow-id": "ZH0RKJvh"
}
...
8. Response
You’ll be getting the general response that you get from either API.
...