Thursday, 23 May 2013

GNUPG Encoder - Biztalk custom pipeline component



This Article helps in creating Custom pipeline component for PGP encryption using GNUPG software.

Download and install GNUPG on machine.

Generate keys for Encryption using command 






























gpg --gen-key


Receipientid : Test@company.com

Passphase : Test@123

Remember Email Id and Passphase as these are required during encryption.

Code For creating Pipeline component is : 


public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(IPipelineContext pContext, Microsoft.BizTalk.Message.Interop.IBaseMessage pInMsg)
        {
            IBaseMessage outMsg = pInMsg;
            msgPart = pInMsg.BodyPart;
            Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream();
            try
            {
                if (msgPart != null)
                {
                    if (originalStream != null)
                    {
                        byte[] arrByte = new byte[0];
                        originalStream = (new MemoryStream(arrByte));

                        // Code Added Here
                        GnuPG gpg = new GnuPG();
                        gpg.BinaryPath = Path.GetDirectoryName(textAppPath);
                        gpg.Recipient = textReceipientId;
                        //  Perform encryption

                        // convert string to stream
                        MemoryStream encryptedStream = new MemoryStream();
                        gpg.Encrypt(originalStream, encryptedStream);
                        encryptedStream.Seek(0, SeekOrigin.Begin);
                        msgPart.Data = encryptedStream;
                        outMsg = pInMsg;
                        outMsg.BodyPart.Data = encryptedStream;
                        //
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return outMsg;
        }

After creating pipeline component , you need to install dll in GAC and copy dll at location 

“C:\Program Files\Microsoft BizTalk Server 2010\Pipeline Components”..

Now creates send pipeline and add this component at encode stage.






















Deploy and configure solution using admin console.
 












Download sorce code from MSDN.

Wednesday, 22 May 2013

Create windows Utility for GNUPG



Download and Install GNUPG 

Before we write a line of code, we need to create a key for encryption/decryption.

PGP use Public Key Cryptography

Create private key using GNU command 

 gpg --gen-key


































Receipientid : Test@company.com

Passphase : Test@123

Remember Email Id and Passphase as these are required during encryption and decryption





















Code for Encryption : 

   
                string appPath = @"C:\Program Files\GNU\GnuPG\pub\gpg2.exe";
                string dataToEncrypt = "DataToEncrypt";
                GnuPG gpg = new GnuPG();
                gpg.BinaryPath = Path.GetDirectoryName(appPath);
                gpg.Recipient = "ReceipientId";// EmailId
                //  Perform encryption

                // convert string to stream
                byte[] byteArray = Encoding.UTF8.GetBytes(dataToEncrypt);
                MemoryStream sourceStream = new MemoryStream(byteArray);
                MemoryStream encryptedStream = new MemoryStream();
                gpg.Encrypt(sourceStream, encryptedStream);
                encryptedStream.Position = 0;
                StreamReader reader = new StreamReader(encryptedStream);
                string text = reader.ReadToEnd();
                textBox2.Text = text; 

Code For Decryption :  

                GnuPG gpg = new GnuPG();

                string dataToDecrypt = "dataToDecrypt";

                string appPath = @"C:\Program Files\GNU\GnuPG\pub\gpg2.exe";
                gpg.BinaryPath = Path.GetDirectoryName(appPath);

                byte[] byteArray = Encoding.UTF8.GetBytes(dataToDecrypt);
                MemoryStream sourceStream = new MemoryStream(byteArray);
                MemoryStream decryptedStream = new MemoryStream();
                //  Decrypt
                gpg.Passphrase = "passphase";// Passphase
                gpg.Decrypt(sourceStream, decryptedStream);

                decryptedStream.Position = 0;
                StreamReader reader = new StreamReader(decryptedStream);
                string text = reader.ReadToEnd();
                textBox2.Text = text; 

DownLoad From MSDN