Re: C# Equivalent of C++ MD5 Algorith



How do I go about implementing that in C#. I tried some of the various
x509 and pkcs7 classes and I kept getting exceptions having to do with
certificates and whatnot. I felt like I was wasting my time going down
the wrong path and this stuff doesn't seem too well documented on
msdn.microsoft.com.

Regards

Ben Voigt wrote:
<galtschul@xxxxxxxxx> wrote in message
news:1164141343.043155.186300@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
I am re-writing a C++ application in C# that takes a user's password,
encrypts it using MD5 (I think), and compares it to what was encrypted
and stored in the database when the user initially created their
password. The problem is that the C++ encryption generates 110
characters and the C# encryption generates only 24. The interesting
thing is that the 24 charectars generated by the C# MD5 algorithm
matches the last 24 charecters of the C++ encryption algorithm. Here is
the C++ code:

The C++ code is requesting ASN.1 encoding of a PKCS #7 X.509 message, which
will naturally add a humonguous header to the data.


/**************************************/
std::string PasswordHash::get_passwordhash(char *s)
{
std::string hashed_value;

const BYTE* sval[1];
unsigned long lval[1];

sval[0] = reinterpret_cast<BYTE*>(s);
lval[0] = lstrlen(s);

CRYPT_ALGORITHM_IDENTIFIER AlgId;
AlgId.pszObjId=szOID_RSA_MD5;
AlgId.Parameters.cbData=0;

CRYPT_HASH_MESSAGE_PARA hash;
hash.cbSize = sizeof(CRYPT_HASH_MESSAGE_PARA);
hash.dwMsgEncodingType = (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING);
hash.hCryptProv = NULL;
hash.HashAlgorithm = AlgId;
hash.pvHashAuxInfo = NULL;

unsigned long hash_length = 0;
if(!CryptHashMessage( &hash, FALSE, 1, sval, lval, NULL,
&hash_length, NULL, NULL))
{
DWORD error = GetLastError();
return hashed_value;
}

BYTE* hash_data = new BYTE[hash_length + 1];
ZeroMemory(hash_data, hash_length + 1);

if(!CryptHashMessage(&hash, FALSE, 1, sval, lval, hash_data,
&hash_length, NULL, NULL))
{
DWORD error = GetLastError();
return hashed_value;
}

std::vector<char > vhash_data;
vhash_data.resize(hash_length);
memcpy(&vhash_data[0], (void*)hash_data, hash_length);

base64<char> encoder;
int state = 0;
encoder.put(vhash_data.begin(), vhash_data.end(),
std::back_inserter(hashed_value), state, base64<>::noline());
return hashed_value;
}

/**************************************/

And here is the C# code that I'm using:

string generatePassword(string password)
{
MD5 md5Hasher = new MD5CryptoServiceProvider();
byte[] data =
md5Hasher.ComputeHash(Encoding.ASCII.GetBytes(password));
string s = Convert.ToBase64String(data);
return s;
}

C++ OUTPUT
--------------------------
"MEcGCSqGSIb3DQEHBaA6MDgCAQAwDAYIKoZIhvcNAgUFADATBgkqhkiG9w0BBwGgBgQEODg3OAQQAETe7sQ97Rm5UhJQeesXgQ=="

C# OUTPUT
--------------------------
"AETe7sQ97Rm5UhJQeesXgQ=="

Am I doing something wrong in the C# code? Perhaps I'm not fully
understanding what the C++ code is doing.

Thanks in advance for any help I can get


.



Relevant Pages

  • Re: Byte array to string and back - newbie question
    ... // Create a symmetric algorithm. ... This is done to make encryption more ... // Encrypt a string into a string using a password ... // Decrypt a byte array into a byte array using a key and an IV ...
    (microsoft.public.dotnet.framework.aspnet.security)
  • Re: Using Python To Create An Encrypted Container
    ... an encrypted archive utility designed for secure archiving ... A match string allows you to only extract files matching a given ... Encrypt the string s using passwd and encryption cipher enc ...
    (comp.lang.python)
  • Re: C# Equivalent of C++ MD5 Algorith
    ... string as unicode (which mine is not. ... The problem is that the C++ encryption generates 110 ... thing is that the 24 charectars generated by the C# MD5 algorithm ... DWORD error = GetLastError; ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: How good an encryption algorithm is this?
    ... As long as the string can be converted to/from a byte stream, ... then you can apply that after the encryption. ... > So I decided to invent my own algorithm, and I just wanted anybody's> opinion on how secure this could be compared to the Win32 API version. ... > HCRYPTHASH hCryptHash; ...
    (microsoft.public.vc.language)
  • Length of the data to decrypt is invalid
    ... I found this code on a site for doing string encryption/decryption. ... // Create a symmetric algorithm. ... // This is done to make encryption more secure. ... // This will tell it that we have done our decryption ...
    (microsoft.public.dotnet.framework.aspnet)

Loading