<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Crypto API - Verschlüsselung funktioniert nicht wie erwartet...]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche einen datenstrom aus einem zeiger (char*, nullterminiert), übergeben aus visual basic 6 mit einem CSP(Cryptographic Service Provider) und einigen dazugehörigen algorithmen innerhalb dieser funktionen zu verschlüsseln.<br />
der erste anschein, leider trügt der, sagt das es funktioniert hat, da auch die funktionen keine fehler zurückgeben (char*GetErrorMessage(GetLastError())).</p>
<p>hier ist der code, noch ohne große fehlerbehandelung. die funktionen werden als __stdcall c exportiert und können so von vb aus aufgerufen werden.</p>
<p>leider ist das (rückgabe)ergebnis sch****<br />
wenn einer eine idee hat, was das ein kann, gerne lasse ich auch die dll und die projektdatei zukommen...</p>
<p>Wenn ich das übergebe : &quot;Crypt Aquire Context&quot;, kmmt das nach verschlüsseln: &quot;8;ò\Y]ùÞÏñ&quot;<br />
und das nach entschlüsseln: &quot;r¾·Æ…ZyŒ‹²R2mM27”&quot;<br />
wie man sieht klappt das was nicht...</p>
<p>hier der code:</p>
<p>CSP: &quot;Microsoft Enhanced Cryptographic Provider&quot; -&gt; MS_ENHANCED_PROV<br />
CSP_TYP: PROV_RSA_FULL</p>
<pre><code>//------------------- FUNCTION FOR ENCRYPTING DATA STREAM -------------------------//

MDSECSERPROV_API_EXP bool MDEncryptStringStream(char *strInOutStream, char *pvCryptKey){

	bool retval = false;//return value is standart false

	DWORD str_stream_length = strlen(strInOutStream); // get stream size
	DWORD str_key_length = strlen((char*)pvCryptKey);// convert key to string

	//aquire crypt context		
	if(CryptAcquireContext(&amp;phProv,
						   NULL,
						   MS_ENHANCED_PROV,
						   PROV_RSA_FULL,
						   CRYPT_VERIFYCONTEXT)){
		//generate crypt. key
		if(CryptGenKey(phProv,
			           CALG_RC4,
					   CRYPT_NO_SALT,
					   &amp;phKey)){
			//encrypt data
			if(CryptEncrypt(phKey,
							0,
							TRUE,
							0,
							(BYTE*)strInOutStream,
							&amp;str_stream_length,
							str_stream_length)){

			}else{			
				//copy error message in buffer
				strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
				retval = false;				
			}

		}else{
			//copy error message in buffer
			strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
			retval = false;				
		}

	}else{
		//copy error message in buffer
		strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
		retval = false;		

	}	

	//release context
	CryptReleaseContext(phProv,0);
	CryptDestroyKey(phKey);

	return retval; //return error code

}

//------------------- FUNCTION FOR DECRYPTING DATA STREAM -------------------------//

MDSECSERPROV_API_EXP bool MDDecryptStringStream(char *strInOutStream, char *pvCryptKey){
	bool retval = false;//return value is standart false

	DWORD str_stream_length = strlen(strInOutStream); // get stream size
	DWORD str_key_length = strlen((char*)pvCryptKey);// convert key to string

	//aquire crypt context		
	if(CryptAcquireContext(&amp;phProv,
						   NULL,
						   MS_ENHANCED_PROV,
						   PROV_RSA_FULL,
						   CRYPT_VERIFYCONTEXT)){
		//generate crypt. key
		if(CryptGenKey(phProv,
			           CALG_RC4,
					   CRYPT_NO_SALT,
					   &amp;phKey)){
			//decrypt data
			if(CryptDecrypt(phKey,
							0,
							TRUE,
							0,
							(BYTE*)strInOutStream,
 							&amp;str_stream_length)){

			}else{			
				//copy error message in buffer
				strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
				retval = false;				
			}

		}else{
			//copy error message in buffer
			strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
			retval = false;				
		}

	}else{
		//copy error message in buffer
		strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
		retval = false;		

	}	

	//release context
	CryptReleaseContext(phProv,0);
	CryptDestroyKey(phKey);

	return retval; //return error code

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/82661/crypto-api-verschlüsselung-funktioniert-nicht-wie-erwartet</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:16:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/82661.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Aug 2004 21:59:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Crypto API - Verschlüsselung funktioniert nicht wie erwartet... on Thu, 12 Aug 2004 21:59:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche einen datenstrom aus einem zeiger (char*, nullterminiert), übergeben aus visual basic 6 mit einem CSP(Cryptographic Service Provider) und einigen dazugehörigen algorithmen innerhalb dieser funktionen zu verschlüsseln.<br />
der erste anschein, leider trügt der, sagt das es funktioniert hat, da auch die funktionen keine fehler zurückgeben (char*GetErrorMessage(GetLastError())).</p>
<p>hier ist der code, noch ohne große fehlerbehandelung. die funktionen werden als __stdcall c exportiert und können so von vb aus aufgerufen werden.</p>
<p>leider ist das (rückgabe)ergebnis sch****<br />
wenn einer eine idee hat, was das ein kann, gerne lasse ich auch die dll und die projektdatei zukommen...</p>
<p>Wenn ich das übergebe : &quot;Crypt Aquire Context&quot;, kmmt das nach verschlüsseln: &quot;8;ò\Y]ùÞÏñ&quot;<br />
und das nach entschlüsseln: &quot;r¾·Æ…ZyŒ‹²R2mM27”&quot;<br />
wie man sieht klappt das was nicht...</p>
<p>hier der code:</p>
<p>CSP: &quot;Microsoft Enhanced Cryptographic Provider&quot; -&gt; MS_ENHANCED_PROV<br />
CSP_TYP: PROV_RSA_FULL</p>
<pre><code>//------------------- FUNCTION FOR ENCRYPTING DATA STREAM -------------------------//

MDSECSERPROV_API_EXP bool MDEncryptStringStream(char *strInOutStream, char *pvCryptKey){

	bool retval = false;//return value is standart false

	DWORD str_stream_length = strlen(strInOutStream); // get stream size
	DWORD str_key_length = strlen((char*)pvCryptKey);// convert key to string

	//aquire crypt context		
	if(CryptAcquireContext(&amp;phProv,
						   NULL,
						   MS_ENHANCED_PROV,
						   PROV_RSA_FULL,
						   CRYPT_VERIFYCONTEXT)){
		//generate crypt. key
		if(CryptGenKey(phProv,
			           CALG_RC4,
					   CRYPT_NO_SALT,
					   &amp;phKey)){
			//encrypt data
			if(CryptEncrypt(phKey,
							0,
							TRUE,
							0,
							(BYTE*)strInOutStream,
							&amp;str_stream_length,
							str_stream_length)){

			}else{			
				//copy error message in buffer
				strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
				retval = false;				
			}

		}else{
			//copy error message in buffer
			strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
			retval = false;				
		}

	}else{
		//copy error message in buffer
		strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
		retval = false;		

	}	

	//release context
	CryptReleaseContext(phProv,0);
	CryptDestroyKey(phKey);

	return retval; //return error code

}

//------------------- FUNCTION FOR DECRYPTING DATA STREAM -------------------------//

MDSECSERPROV_API_EXP bool MDDecryptStringStream(char *strInOutStream, char *pvCryptKey){
	bool retval = false;//return value is standart false

	DWORD str_stream_length = strlen(strInOutStream); // get stream size
	DWORD str_key_length = strlen((char*)pvCryptKey);// convert key to string

	//aquire crypt context		
	if(CryptAcquireContext(&amp;phProv,
						   NULL,
						   MS_ENHANCED_PROV,
						   PROV_RSA_FULL,
						   CRYPT_VERIFYCONTEXT)){
		//generate crypt. key
		if(CryptGenKey(phProv,
			           CALG_RC4,
					   CRYPT_NO_SALT,
					   &amp;phKey)){
			//decrypt data
			if(CryptDecrypt(phKey,
							0,
							TRUE,
							0,
							(BYTE*)strInOutStream,
 							&amp;str_stream_length)){

			}else{			
				//copy error message in buffer
				strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
				retval = false;				
			}

		}else{
			//copy error message in buffer
			strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
			retval = false;				
		}

	}else{
		//copy error message in buffer
		strcpy(strInOutStream,GetErrorMessage(GetLastError()));		
		retval = false;		

	}	

	//release context
	CryptReleaseContext(phProv,0);
	CryptDestroyKey(phKey);

	return retval; //return error code

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/581464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/581464</guid><dc:creator><![CDATA[__mieser_quellcode_zwerg]]></dc:creator><pubDate>Thu, 12 Aug 2004 21:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to Crypto API - Verschlüsselung funktioniert nicht wie erwartet... on Fri, 13 Aug 2004 10:35:06 GMT]]></title><description><![CDATA[<p>Ich meine letztens gelesen zu haben, dass Visual Basic Unicode nutzt.<br />
Direkt aus deinem Programm funktioniert die Funktion?<br />
Zeig dir doch mal den String aus Visual Basic an, dann weißt du schon mal, ob er in Unicode ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/581814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/581814</guid><dc:creator><![CDATA[D*niel *chumann]]></dc:creator><pubDate>Fri, 13 Aug 2004 10:35:06 GMT</pubDate></item></channel></rss>