decrypting question
-
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
-
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
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
-
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
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