PHP Classes
elePHPant
Icontem

Decrypt C# Encryption String with PHP is this possible?: I want to Decrypt the C# Encryption string in php

Recommend this page to a friend!
  All requests RSS feed  >  Decrypt C# Encryption String with PHP...  >  Request new recommendation  >  A request is featured when there is no good recommended package on the site when it is posted. Featured requests  >  No recommendations No recommendations  

Decrypt C# Encryption String with PHP is this possible?

A request is featured when there is no good recommended package on the site when it is posted. Edit

Picture of muabshir by muabshir - 8 days ago (2016-10-21)

I want to Decrypt the C# Encryption string in php

This request is clear and relevant.
This request is not clear or is not relevant.

+3

Encryption String: F7EBC908B106D4282FA705D0EED915DBE002774B1A152DCC Key: ABC12345 __________________________________

C# Code _________________________________

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
 
namespace THK.PAMS_DataAccess.DataAccess
{
   
    public class EncryptionHelper : Dictionary<string, string>
    {
        // Change the following keys to ensure uniqueness
        // Must be 8 bytes
        protected byte[] _keyBytes = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };
 
        // Must be at least 8 characters
        protected string _keyString = "ABC12345";
 
        // Name for checksum value (unlikely to be used as arguments by user)
        protected string _checksumKey = "__$$";
 
        /// <summary>
        /// Creates an empty dictionary
        /// </summary>
        public EncryptionHelper()
        {
        }
 
        /// <summary>
        /// Creates a dictionary from the given, encrypted string
        /// </summary>
        /// <param name="encryptedData"></param>
        public EncryptionHelper(string encryptedData)
        {
            // Descrypt string
            string data = Decrypt(encryptedData);
 
            // Parse out key/value pairs and add to dictionary
            string checksum = null;
            string[] args = data.Split('&');
 
            foreach (string arg in args)
            {
                int i = arg.IndexOf('=');
                if (i != -1)
                {
                    string key = arg.Substring(0, i);
                    string value = arg.Substring(i + 1);
                    if (key == _checksumKey)
                        checksum = value;
                    else
                        base.Add(HttpUtility.UrlDecode(key), HttpUtility.UrlDecode(value));
                }
            }
 
            // Clear contents if valid checksum not found
            if (checksum == null || checksum != ComputeChecksum())
                base.Clear();
        }
 
        /// <summary>
        /// Returns an encrypted string that contains the current dictionary
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            // Build query string from current contents
            StringBuilder content = new StringBuilder();
 
            foreach (string key in base.Keys)
            {
                if (content.Length > 0)
                    content.Append('&');
                content.AppendFormat("{0}={1}", HttpUtility.UrlEncode(key),
                  HttpUtility.UrlEncode(base[key]));
            }
 
            // Add checksum
            if (content.Length > 0)
                content.Append('&');
            content.AppendFormat("{0}={1}", _checksumKey, ComputeChecksum());
 
            return Encrypt(content.ToString());
        }
 
        /// <summary>
        /// Returns a simple checksum for all keys and values in the collection
        /// </summary>
        /// <returns></returns>
        protected string ComputeChecksum()
        {
            int checksum = 0;
 
            foreach (KeyValuePair<string, string> pair in this)
            {
                checksum += pair.Key.Sum(c => c - '0');
                checksum += pair.Value.Sum(c => c - '0');
            }
 
            return checksum.ToString("X");
        }
 
        /// <summary>
        /// Encrypts the given text
        /// </summary>
        /// <param name="text">Text to be encrypted</param>
        /// <returns></returns>
        protected string Encrypt(string text)
        {
            try
            {
                byte[] keyData = Encoding.UTF8.GetBytes(_keyString.Substring(0, 8));
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] textData = Encoding.UTF8.GetBytes(text);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms,
                  des.CreateEncryptor(keyData, _keyBytes), CryptoStreamMode.Write);
                cs.Write(textData, 0, textData.Length);
                cs.FlushFinalBlock();
                return GetString(ms.ToArray());
            }
            catch (Exception)
            {
                return String.Empty;
            }
        }
 
        /// <summary>
        /// Decrypts the given encrypted text
        /// </summary>
        /// <param name="text">Text to be decrypted</param>
        /// <returns></returns>
        protected string Decrypt(string text)
        {
            try
            {
                byte[] keyData = Encoding.UTF8.GetBytes(_keyString.Substring(0, 8));
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] textData = GetBytes(text);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms,
                  des.CreateDecryptor(keyData, _keyBytes), CryptoStreamMode.Write);
                cs.Write(textData, 0, textData.Length);
                cs.FlushFinalBlock();
                return Encoding.UTF8.GetString(ms.ToArray());
            }
            catch (Exception)
            {
                return String.Empty;
            }
        }
 
        /// <summary>
        /// Converts a byte array to a string of hex characters
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        protected string GetString(byte[] data)
        {
            StringBuilder results = new StringBuilder();
 
            foreach (byte b in data)
                results.Append(b.ToString("X2"));
 
            return results.ToString();
        }
 
        /// <summary>
        /// Converts a string of hex characters to a byte array
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        protected byte[] GetBytes(string data)
        {
            // GetString() encodes the hex-numbers with two digits
            byte[] results = new byte[data.Length / 2];
 
            for (int i = 0; i < data.Length; i += 2)
                results[i / 2] = Convert.ToByte(data.Substring(i, 2), 16);
 
            return results;
        }
    }
}
  • 1 Clarification request
  • 1. Picture of Michael Cummings by Michael Cummings - 4 days ago (2016-10-25) Reply

    Just to let you know I created a class to do this after see something on tweeter. I'll try to get it up on Github and on PhpClasses as well for you in the next couple days.

    • 2. Picture of muabshir by muabshir - 3 days ago (2016-10-25) in reply to comment 1 by Michael Cummings Comment

      i really love to see your work if you got success ur a super coder for me waiting for you work :)

    • 3. Picture of muabshir by muabshir - Yesterday (2016-10-28) in reply to comment 1 by Michael Cummings Comment

      can you email me the solution with example

      mubashir7 at gmail.com

Ask clarification

1 Recommendation

Encryption Helper: Encrypt and decrypt of GET query lists

This recommendation solves the problem.
This recommendation does not solve the problem.

+1

Picture of Michael Cummings by Michael Cummings package author package author Reputation 30 - 16 hours ago (2016-10-28) Comment

It's awaiting approval now but you can access it on GitHub

github.com/Dragonrun1/encryption-helper

or through Packagist

packagist.org/packages/dragonrun1/encryption-helper

Sorry took longer then I expected to get it up some where you could access it but ended up getting a bit more polish in the mean time while I continue to work on it as I had time.


Recommend package
: 
: