C# Equivalent of C++ MD5 Algorith



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:

/**************************************/
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: Is there a C# equivalent of the VB.NET asc function?
    ... If it's one way hashing you need use MD5 ... If you need proper 2 way encryption use something like RSA ... > Public Function Encode(Key As String, ByVal Str As String) As String ... > Dim Tmp As String, RealKey As String, sc As String, kc As String ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Advice wanted for storing passwords in a database
    ... MD5 does not allow a separate 'salt' or 'key' to be input, just the string ... It is customisable in that you can alter the encryption algorithm ...
    (comp.lang.php)
  • 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: C# Equivalent of C++ MD5 Algorith
    ... your original post said you were looking for an MD5 Hash. ... Co-founder, Eggheadcafe.com developer portal: ... The problem is that the C++ encryption generates 110 ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Unix Password Encryption Procedure
    ... > I know that most Unix machines either use the DES encryption algorithm ... Your questions about MD5 indicates that you might be using Linux, ... I am curious as to given an encrypted string, ...
    (comp.unix.programmer)

Loading