100% found this document useful (1 vote)
720 views

SAP PI AES Encryption in Message Mapping - Jaehoo Weblog

The document describes a Java user defined function (UDF) for encrypting and decrypting text data in SAP PI message mappings using AES encryption. The UDF includes functions for encrypting a value using a key, and decrypting an encrypted value using the same key. It addresses issues with decryption only returning the first 16 characters by padding strings to a fixed length of 16 characters. The UDF can be used to encrypt data in a message mapping with a given key, producing an encrypted value, and then decrypt that value back to the original by using the decrypt function with the encrypted value and same key.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
720 views

SAP PI AES Encryption in Message Mapping - Jaehoo Weblog

The document describes a Java user defined function (UDF) for encrypting and decrypting text data in SAP PI message mappings using AES encryption. The UDF includes functions for encrypting a value using a key, and decrypting an encrypted value using the same key. It addresses issues with decryption only returning the first 16 characters by padding strings to a fixed length of 16 characters. The UDF can be used to encrypt data in a message mapping with a given key, producing an encrypted value, and then decrypt that value back to the original by using the decrypt function with the encrypted value and same key.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

2/4/2019 SAP PI AES encryption in Message Mapping – Jaehoo Weblog

Jaehoo Weblog

Blog personal de jaehoo

SAP PI AES encryption in Message Mapping


enero 17, 2019enero 17, 2019

I developed a simple UDF (User Defined Function) in Java to crypt  and decrypt some text data in my
message mapping, first into section ‘Attributes and Methods‘ I setted static constants for AES and I used
a method to “normalize” the string text for crypt and decrypt with the method fixedLengthString.

I don’t know why but if I didn’t this the decryption does not work, the method only get the first 16
characters and apply a String format.

This is the code:

1 public static String SEC_K_SPEC="AES";
2 public static String CIPER_S="AES/ECB/PKCS5Padding";
3  
4 public static String fixedLengthString(String string) {
5 return String.format("%1$16s", string).substring(0,16);
6 }

And this are the functions , each one require a key to crypt or decrypt the text value, the rest of the code
is explained by self:

https://jaehoo.wordpress.com/2019/01/17/sap-pi-aes-encryption-in-message-mapping/ 1/4
2/4/2019 SAP PI AES encryption in Message Mapping – Jaehoo Weblog

Crypt function:

1 public String cryptAES(String keytext, String valueToCryp, Container co
2  
3 byte[] key = new byte[16];
4 String outKey=fixedLengthString(keytext);
5  
6 key =outKey.getBytes();
7  
8 BASE64Encoder encoder = new BASE64Encoder();
9  
10 String encoded="";
11  
12 try {
13 // Create key and cipher
14 Key aesKey = new SecretKeySpec(key, SEC_K_SPEC);
15 Cipher cipher = Cipher.getInstance(CIPER_S);
16  
17 // encrypt the CreditCard_No
18 cipher.init(Cipher.ENCRYPT_MODE, aesKey);
19 byte[] encrypted = cipher.doFinal(valueToCryp.getBytes());
20  
21 encoded= encoder.encode(encrypted);
22 return encoded;
23 }
24  
25 catch(Exception e) {
26  
27 e.printStackTrace();
28  
29 return "error during encryption"+e.toString();
30  
31 }
32  
33 }

Decrypt Function:

https://jaehoo.wordpress.com/2019/01/17/sap-pi-aes-encryption-in-message-mapping/ 2/4
2/4/2019 SAP PI AES encryption in Message Mapping – Jaehoo Weblog
1 public String decryptAES(String keytext, String encryptedValue, Contain
2  
3 byte[] key = new byte[16];
4 String outKey=fixedLengthString(keytext);
5  
6 key =outKey.getBytes();
7  
8 BASE64Decoder decoder = new BASE64Decoder();
9  
10 try {
11 // Create key and cipher
12 Key aesKey = new SecretKeySpec(key, SEC_K_SPEC);
13 Cipher cipher = Cipher.getInstance(CIPER_S);
14  
15 // decrypt the text
16 cipher.init(Cipher.DECRYPT_MODE, aesKey);
17  
18 byte[] encryptedbyte= decoder.decodeBuffer(encryptedValue);
19 byte[] decryptedValue=cipher.doFinal(encryptedbyte);
20  
21 //Converting the input Strings to bytes so that it can be decrypted
22  
23 String decrypted = new String(decryptedValue,"UTF­8");
24  
25 return decrypted;
26  
27 }
28  
29 catch(Exception e) {
30  
31 e.printStackTrace();
32  
33 return "error during decryption" + e.toString();
34  
35 }
36  
37 }

Now to use it, drag the functions into message mapping editor, for example to crypt with this  data
“1234567890123456” with key “test” the result is
“va4IRNUgVL3DbF+j5yCGCHEvnmjmfpMe58F8YhHGFhE=”

https://jaehoo.wordpress.com/2019/01/17/sap-pi-aes-encryption-in-message-mapping/ 3/4
2/4/2019 SAP PI AES encryption in Message Mapping – Jaehoo Weblog

And to recover the original value, the crypted data and the key are going used with Decrypt function:

And that’s all, the original value is recovered.

Cheers

Publicado en: Development, Java, SAP, SAP PI | Etiquetado: Java, SAP PI, Security
This site uses Akismet to reduce spam. Learn how your comment data is processed.

CREA UN BLOG O UN SITIO WEB GRATUITOS CON WORDPRESS.COM.

https://jaehoo.wordpress.com/2019/01/17/sap-pi-aes-encryption-in-message-mapping/ 4/4

You might also like