Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. decrypting question

decrypting question

Scheduled Pinned Locked Moved C / C++ / MFC
csharpquestionworkspace
3 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    monsieur_jj
    wrote on last edited by
    #1

    Hi all, I have this c# decrypting code:

    public static string Decrypt(string cipherString, bool useHashing)
    {
    byte[] keyArray;
    byte[] toEncryptArray = Convert.FromBase64String(cipherString);

            System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
            //Get your key from config file to open the lock!
            string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
            
            if (useHashing)
            {
                MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
                hashmd5.Clear();
            }
            else
                keyArray = UTF8Encoding.UTF8.GetBytes(key);
    
            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
            tdes.Key = keyArray;
            tdes.Mode = CipherMode.ECB;
            tdes.Padding = PaddingMode.PKCS7;
    
            
            ICryptoTransform cTransform = tdes.CreateDecryptor();
            byte\[\] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                        
            tdes.Clear();
            return UTF8Encoding.UTF8.GetString(resultArray);
        }
    

    public static string Encrypt(string toEncrypt, bool useHashing)
    {
    byte[] keyArray;
    byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

            System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
            // Get the key from config file
            string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
            //System.Windows.Forms.MessageBox.Show(key);
            if (useHashing)
            {
                MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
                hashmd5.Clear();
            }
            else
                keyArray = UTF8Encoding.UTF8.GetBytes(key);
    
            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
            tdes.Key = keyArray;
            tdes.Mode = CipherMode.ECB;
            tdes.Padding = PaddingMode.PKCS7;
    
            ICryptoTransform cTransform = tdes.CreateEncryptor();
            byte\[\] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray
    
    L 1 Reply Last reply
    0
    • M monsieur_jj

      Hi all, I have this c# decrypting code:

      public static string Decrypt(string cipherString, bool useHashing)
      {
      byte[] keyArray;
      byte[] toEncryptArray = Convert.FromBase64String(cipherString);

              System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
              //Get your key from config file to open the lock!
              string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
              
              if (useHashing)
              {
                  MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                  keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
                  hashmd5.Clear();
              }
              else
                  keyArray = UTF8Encoding.UTF8.GetBytes(key);
      
              TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
              tdes.Key = keyArray;
              tdes.Mode = CipherMode.ECB;
              tdes.Padding = PaddingMode.PKCS7;
      
              
              ICryptoTransform cTransform = tdes.CreateDecryptor();
              byte\[\] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                          
              tdes.Clear();
              return UTF8Encoding.UTF8.GetString(resultArray);
          }
      

      public static string Encrypt(string toEncrypt, bool useHashing)
      {
      byte[] keyArray;
      byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

              System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
              // Get the key from config file
              string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
              //System.Windows.Forms.MessageBox.Show(key);
              if (useHashing)
              {
                  MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
                  keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
                  hashmd5.Clear();
              }
              else
                  keyArray = UTF8Encoding.UTF8.GetBytes(key);
      
              TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
              tdes.Key = keyArray;
              tdes.Mode = CipherMode.ECB;
              tdes.Padding = PaddingMode.PKCS7;
      
              ICryptoTransform cTransform = tdes.CreateEncryptor();
              byte\[\] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray
      
      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #2

      Hello again JayJay, I have written a sample for you. It doesn't get any better than this.

      #include "stdafx.h"
      #include <windows.h>
      #include <Wincrypt.h>
      #include <assert.h>
      
      #pragma comment(lib, "crypt32.lib")
      
      LPTSTR Base64Decode(LPCTSTR lpData, DWORD dwSize)
      {
      	DWORD dwResult = 0;
      	if(CryptStringToBinary(lpData, dwSize, CRYPT_STRING_BASE64, NULL, &dwResult,NULL,NULL))
      	{
      		LPTSTR lpszBase64Decoded = new TCHAR[dwResult+(sizeof(TCHAR) * 2)];
      		memset(lpszBase64Decoded,0,dwResult);
      		if(CryptStringToBinary(lpData, dwSize, CRYPT_STRING_BASE64,(BYTE *)lpszBase64Decoded, &dwResult,NULL,NULL))
      		{
      			*(LPWORD)(lpszBase64Decoded + (dwResult / sizeof(TCHAR))) = 0;
      
      			return lpszBase64Decoded;
      		}
      	}
      	return NULL;
      }
      
      LPTSTR Base64Encode(LPCBYTE lpData, DWORD dwSize, BOOL bStripCRLF)
      {
      	DWORD dwResult = 0;
      	if(CryptBinaryToString(lpData, dwSize, CRYPT_STRING_BASE64, NULL, &dwResult))
      	{
      		LPTSTR lpszBase64 = new TCHAR[dwResult];
      		if(CryptBinaryToString(lpData, dwSize, CRYPT_STRING_BASE64, lpszBase64, &dwResult))
      		{
      			TCHAR pByteLF = *(LPWORD)(lpszBase64 + dwResult -1);
      			TCHAR pByteCR = *(LPWORD)(lpszBase64 + dwResult -2);
      			if(pByteCR == 0x0D && pByteLF == 0x0A)
      			{
      				*(LPWORD)(lpszBase64 + dwResult -2) = 0;
      			}
      			return lpszBase64;
      		}
      	}
      	return NULL;
      }
      
      DWORD TripleDESencrypt(TCHAR *plaintext,DWORD ptlen,TCHAR *passwd,DWORD pwlen,TCHAR *cyphertext,DWORD *ctlen)
      {
      	HCRYPTPROV hProv;
      	HCRYPTHASH hHash;
      	HCRYPTKEY hKey;
      	DWORD dwSizeNeeded =0;
      	DWORD sz =0;
      
      	CryptAcquireContext(&hProv,NULL,MS_STRONG_PROV,PROV_RSA_FULL,0);
      	CryptCreateHash(hProv,CALG_MD5,0,0,&hHash);
      	CryptHashData(hHash,(BYTE*)passwd,pwlen,0);
      	CryptDeriveKey(hProv,CALG_3DES,hHash,0,&hKey);
      
      	if(NULL != cyphertext && 0 != ptlen)
      	{
      		memcpy(cyphertext,plaintext,ptlen);
      		sz=*ctlen;
      		*ctlen=ptlen;
      	}
      
      	if(FALSE == CryptEncrypt(hKey,NULL,1,0,(BYTE *)cyphertext,ctlen,sz))
      	{
      		DWORD dwError = GetLastError();
      		if(ERROR_MORE_DATA == dwError)
      		{
      			dwSizeNeeded = *ctlen * sizeof(TCHAR);
      		}
      	}
      
      	CryptDestroyKey(hKey);
      	CryptDestroyHash(hHash);
      	CryptReleaseContext(hProv,0);
      	return dwSizeNeeded;
      }
      
      DWORD TripleDESdecrypt(TCHAR *cyphertext,DWORD ctlen,TCHAR *passwd,DWORD pwlen,TCHAR *plaintext,DWORD *ptlen)
      {
      	HCRYPTPROV hProv;
      	HCRYPTHASH hHash;
      	HCRYPTKEY hKey;
      	DWORD dwSizeNeeded =0;
      
      	CryptAcquireContext(&hProv,NULL,MS_STRONG_PROV,PROV_RSA_FULL,0);
      	CryptCreateHash(hProv,CA
      
      M 1 Reply Last reply
      0
      • L Lost User

        Hello again JayJay, I have written a sample for you. It doesn't get any better than this.

        #include "stdafx.h"
        #include <windows.h>
        #include <Wincrypt.h>
        #include <assert.h>
        
        #pragma comment(lib, "crypt32.lib")
        
        LPTSTR Base64Decode(LPCTSTR lpData, DWORD dwSize)
        {
        	DWORD dwResult = 0;
        	if(CryptStringToBinary(lpData, dwSize, CRYPT_STRING_BASE64, NULL, &dwResult,NULL,NULL))
        	{
        		LPTSTR lpszBase64Decoded = new TCHAR[dwResult+(sizeof(TCHAR) * 2)];
        		memset(lpszBase64Decoded,0,dwResult);
        		if(CryptStringToBinary(lpData, dwSize, CRYPT_STRING_BASE64,(BYTE *)lpszBase64Decoded, &dwResult,NULL,NULL))
        		{
        			*(LPWORD)(lpszBase64Decoded + (dwResult / sizeof(TCHAR))) = 0;
        
        			return lpszBase64Decoded;
        		}
        	}
        	return NULL;
        }
        
        LPTSTR Base64Encode(LPCBYTE lpData, DWORD dwSize, BOOL bStripCRLF)
        {
        	DWORD dwResult = 0;
        	if(CryptBinaryToString(lpData, dwSize, CRYPT_STRING_BASE64, NULL, &dwResult))
        	{
        		LPTSTR lpszBase64 = new TCHAR[dwResult];
        		if(CryptBinaryToString(lpData, dwSize, CRYPT_STRING_BASE64, lpszBase64, &dwResult))
        		{
        			TCHAR pByteLF = *(LPWORD)(lpszBase64 + dwResult -1);
        			TCHAR pByteCR = *(LPWORD)(lpszBase64 + dwResult -2);
        			if(pByteCR == 0x0D && pByteLF == 0x0A)
        			{
        				*(LPWORD)(lpszBase64 + dwResult -2) = 0;
        			}
        			return lpszBase64;
        		}
        	}
        	return NULL;
        }
        
        DWORD TripleDESencrypt(TCHAR *plaintext,DWORD ptlen,TCHAR *passwd,DWORD pwlen,TCHAR *cyphertext,DWORD *ctlen)
        {
        	HCRYPTPROV hProv;
        	HCRYPTHASH hHash;
        	HCRYPTKEY hKey;
        	DWORD dwSizeNeeded =0;
        	DWORD sz =0;
        
        	CryptAcquireContext(&hProv,NULL,MS_STRONG_PROV,PROV_RSA_FULL,0);
        	CryptCreateHash(hProv,CALG_MD5,0,0,&hHash);
        	CryptHashData(hHash,(BYTE*)passwd,pwlen,0);
        	CryptDeriveKey(hProv,CALG_3DES,hHash,0,&hKey);
        
        	if(NULL != cyphertext && 0 != ptlen)
        	{
        		memcpy(cyphertext,plaintext,ptlen);
        		sz=*ctlen;
        		*ctlen=ptlen;
        	}
        
        	if(FALSE == CryptEncrypt(hKey,NULL,1,0,(BYTE *)cyphertext,ctlen,sz))
        	{
        		DWORD dwError = GetLastError();
        		if(ERROR_MORE_DATA == dwError)
        		{
        			dwSizeNeeded = *ctlen * sizeof(TCHAR);
        		}
        	}
        
        	CryptDestroyKey(hKey);
        	CryptDestroyHash(hHash);
        	CryptReleaseContext(hProv,0);
        	return dwSizeNeeded;
        }
        
        DWORD TripleDESdecrypt(TCHAR *cyphertext,DWORD ctlen,TCHAR *passwd,DWORD pwlen,TCHAR *plaintext,DWORD *ptlen)
        {
        	HCRYPTPROV hProv;
        	HCRYPTHASH hHash;
        	HCRYPTKEY hKey;
        	DWORD dwSizeNeeded =0;
        
        	CryptAcquireContext(&hProv,NULL,MS_STRONG_PROV,PROV_RSA_FULL,0);
        	CryptCreateHash(hProv,CA
        
        M Offline
        M Offline
        monsieur_jj
        wrote on last edited by
        #3

        Hi David, You have been a great help so far, by the way i have tested your code it works however I still need to do some tweaking as I can't convert "Zed5OmjUWs8=" to "test" and also what is this for:

        ICryptoTransform cTransform = tdes.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        Thanks, Jayjay

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • World
        • Users
        • Groups