<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>codegods &#187; C/C++/C#</title>
	<atom:link href="http://codegods.de/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codegods.de</link>
	<description>where code meets experts</description>
	<lastBuildDate>Tue, 17 Aug 2010 19:16:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Certified Authority mit Bouncy Castles</title>
		<link>http://codegods.de/2010/01/26/certified-authority-mit-bouncy-castles-erstellen/</link>
		<comments>http://codegods.de/2010/01/26/certified-authority-mit-bouncy-castles-erstellen/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 14:22:46 +0000</pubDate>
		<dc:creator>Benjamin Peters-Rumpf</dc:creator>
				<category><![CDATA[C/C++/C#]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=211</guid>
		<description><![CDATA[Ich bin mittlerweile von Cryptlib auf Bouncy Castles umgestiegen, da ich merken musste, dass eine Community wichtiger ist als eine gute Doku. Auf diesem Blog werde ich verschiedene Techniken zeigen, wie man Verschlüsseln, Entschlüsseln und vor allem wie man eine CA erstellen kann. Dieser Beitrag geht vor allem um den letzten Punkt. Vielen Dank an [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin mittlerweile von Cryptlib auf Bouncy Castles umgestiegen, da ich merken musste, dass eine Community wichtiger ist als eine gute Doku. Auf diesem Blog werde ich verschiedene Techniken zeigen, wie man Verschlüsseln, Entschlüsseln und vor allem wie man eine CA erstellen kann. Dieser Beitrag geht vor allem um den letzten Punkt.<br />
<img src="http://www.bouncycastle.org/images/home_logo.gif" alt="null" /></p>
<p>Vielen Dank an James Lacey von dem der Code stammt.</p>
<p>Im Folgenden der Code mit dem man selbst-signierte Certified Authority Zertifikate in Bouncy Castle erstellt.<br />
Verändern kann man hierbei den Distinguished Name, das Password, das Expiration Date,... Das erstellte Zertifikat lässt sich einfach auch im Windows,Firefox,usw. importieren. Für die spätere Signierung wird ein Zertifikat benötigt, dass mit dieser CA erstellt wurde.</p>
<pre class="csharp"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> CreateCA<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #000000;">&#123;</span>
&nbsp;
SecureRandom random = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> SecureRandom<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
DateTime startDate = DateTime.<span style="color: #0000FF;">Today</span>;
&nbsp;
DateTime expiryDate = DateTime.<span style="color: #0000FF;">MaxValue</span>; <span style="color: #008080; font-style: italic;">// Set whatever expiration date you want</span>
&nbsp;
BigInteger serialNumber = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> BigInteger<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, BitConverter.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;">&#40;</span>DateTime.<span style="color: #0000FF;">Now</span>.<span style="color: #0000FF;">Ticks</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
RsaKeyPairGenerator generator = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> RsaKeyPairGenerator<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
KeyGenerationParameters genParam = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> KeyGenerationParameters<span style="color: #000000;">&#40;</span>random, <span style="color: #FF0000;">2048</span><span style="color: #000000;">&#41;</span>;
&nbsp;
generator.<span style="color: #0000FF;">Init</span><span style="color: #000000;">&#40;</span>genParam<span style="color: #000000;">&#41;</span>;
&nbsp;
AsymmetricCipherKeyPair keyPair = generator.<span style="color: #0000FF;">GenerateKeyPair</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
X509V1CertificateGenerator certGen = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> X509V1CertificateGenerator<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
X509Name dnName = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> X509Name<span style="color: #000000;">&#40;</span>“CN=My CA Certificate”<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetSerialNumber</span><span style="color: #000000;">&#40;</span>serialNumber<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetIssuerDN</span><span style="color: #000000;">&#40;</span>dnName<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetNotBefore</span><span style="color: #000000;">&#40;</span>startDate<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetNotAfter</span><span style="color: #000000;">&#40;</span>expiryDate<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetSubjectDN</span><span style="color: #000000;">&#40;</span>dnName<span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetPublicKey</span><span style="color: #000000;">&#40;</span>keyPair.<span style="color: #0600FF;">Public</span><span style="color: #000000;">&#41;</span>;
&nbsp;
certGen.<span style="color: #0000FF;">SetSignatureAlgorithm</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;SHA1withRSA&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
X509Certificate cert = certGen.<span style="color: #0000FF;">Generate</span><span style="color: #000000;">&#40;</span>keyPair.<span style="color: #0600FF;">Private</span><span style="color: #000000;">&#41;</span>;
&nbsp;
Pkcs12Store pkcs = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Pkcs12Store<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #FF0000;">string</span> alias = BitConverter.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span>BitConverter.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;">&#40;</span>random.<span style="color: #0000FF;">NextLong</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
pkcs.<span style="color: #0000FF;">SetKeyEntry</span><span style="color: #000000;">&#40;</span>alias, <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> AsymmetricKeyEntry<span style="color: #000000;">&#40;</span>keyPair.<span style="color: #0600FF;">Private</span><span style="color: #000000;">&#41;</span>, <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> X509CertificateEntry<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> X509CertificateEntry<span style="color: #000000;">&#40;</span>cert<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
Stream stream; <span style="color: #008080; font-style: italic;">// Use a MemoryStream or FileStream as appropriate for what you want to do.</span>
&nbsp;
pkcs.<span style="color: #0000FF;">Save</span><span style="color: #000000;">&#40;</span>stream, “My CA Password”.<span style="color: #0000FF;">ToCharArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, random<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #000000;">&#125;</span>
&nbsp;</pre>
<p>Jetzt fehlt nur noch eine Funktion um das Ganze zu benutzen um Zertifikate zu erstellen die signiert sind. Eingestellt werden können wie in der vorigen Funktion die gleichen Parameter. Um das ganze zu speichern kann man das per FileStream aufs Dateisystem packen.</p>
<pre>public void CreateCertificateWithCA(X509Certificate caCert, AsymmetricKeyParameter caKey)

{

SecureRandom random = new SecureRandom();

DateTime startDate = DateTime.Today;

DateTime expiryDate = DateTime.Today.AddYears(1); // Set whatever expiration date you want

BigInteger serialNumber = new BigInteger(1, BitConverter.GetBytes(DateTime.Now.Ticks));

RsaKeyPairGenerator generator = new RsaKeyPairGenerator();

KeyGenerationParameters genParam = new KeyGenerationParameters(random, 2048);

generator.Init(genParam);

AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair();

X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();

X509Name dnName = new X509Name(“CN=My Certificate”);

certGen.SetSerialNumber(serialNumber);

certGen.SetIssuerDN(caCert.IssuerDN);

certGen.SetNotBefore(startDate);

certGen.SetNotAfter(expiryDate);

certGen.SetSubjectDN(dnName);

certGen.SetPublicKey(keyPair.Public);

certGen.SetSignatureAlgorithm("SHA1withRSA");

certGen.AddExtension(X509Extensions.AuthorityKeyIdentifier, true, new AuthorityKeyIdentifierStructure(caCert));

certGen.AddExtension(X509Extensions.SubjectKeyIdentifier, true, new SubjectKeyIdentifierStructure(keyPair.Public));

certGen.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(false));

X509Certificate cert = certGen.Generate(caKey);

Pkcs12Store pk12 = new Pkcs12Store();

string alias = BitConverter.ToString(BitConverter.GetBytes(random.NextLong()));

pk12.SetKeyEntry(alias, new AsymmetricKeyEntry(keyPair.Private), new X509CertificateEntry[] { new X509CertificateEntry(cert) });

Stream stream; // Use a MemoryStream or FileStream as appropriate for what you want to do.

pk12.Save(stream, “My Password”.ToCharArray(), random);
}
</pre>
<p>Ich benutze die funktionen, falls also Fragen bestehen einfach nen Kommentar schreiben.</p>
<p>Viele Grüße,</p>
<p>Benjamin Peters-Rumpf</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2010/01/26/certified-authority-mit-bouncy-castles-erstellen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cryptlib-Tutorial/Hilfe: Verschlüsseln und Entschlüsseln</title>
		<link>http://codegods.de/2009/11/09/cryptlib-tutorial-hilfe-1/</link>
		<comments>http://codegods.de/2009/11/09/cryptlib-tutorial-hilfe-1/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 15:43:05 +0000</pubDate>
		<dc:creator>Benjamin Peters-Rumpf</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[cryptlib]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[verschlüsselung]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=166</guid>
		<description><![CDATA[Cryptlib hat zwar ein ausführliche Dokumentation, jedoch im Detail fehlen oft Informationen. Ein gutes Beispiel ist die pubkeyContext-Variable die zwar mehrfach benutzt wird, jedoch keine wirkliche Erläuterung hat. Aus diesem Grund werde ich hier auf der Seite ein paar einfache Beispiele veröffentlichen wie manche Dinge funktionieren. Heute fangen wir mal mit einfachem Ver- und Entschlüsseln [...]]]></description>
			<content:encoded><![CDATA[<p>Cryptlib hat zwar ein ausführliche Dokumentation, jedoch im Detail fehlen oft Informationen. Ein gutes Beispiel ist die pubkeyContext-Variable die zwar mehrfach benutzt wird, jedoch keine wirkliche Erläuterung hat. Aus diesem Grund werde ich hier auf der Seite ein paar einfache Beispiele veröffentlichen wie manche Dinge funktionieren.</p>
<p style="text-align: center"><img class="aligncenter" src="http://t1.gstatic.com/images?q=tbn:B4rBikAC6FpvWM:http://www.cs.auckland.ac.nz/~pgut001/cryptlib/img/title.gif" alt="" width="102" height="103" /></p>
<p>Heute fangen wir mal mit einfachem Ver- und Entschlüsseln an. Ich hatte dabei das Problem, dass ich an dem Message-Buffer verzweifelt bin. Es ist leider nicht genau beschrieben wie man bei Verschlüsselungen zurück schließen kann auf den Text der Eingabe. Bei Cryptlib ist auch die Einstellung der Attibute und Variablen wichtig, deshalb genau so wie sie hier stehen. Im Folgenden sind die Verschlüsselung und die Entschlüsselung in C#.</p>
<pre>private static byte[] encrypt(String message) {
int bytescopied;
byte[] envelopedData = new byte[100];

int cryptEnvelope = crypt.CreateEnvelope(crypt.UNUSED, crypt.FORMAT_PKCS7);
crypt.SetAttribute(cryptEnvelope, crypt.ENVINFO_DATASIZE, message.Length);
bytescopied = crypt.PushData(cryptEnvelope, message);
crypt.FlushData(cryptEnvelope);

bytescopied = crypt.PopData(cryptEnvelope, envelopedData, envelopedData.Length);

crypt.DestroyEnvelope(cryptEnvelope);

return envelopedData;

}

private static String decrypt(byte[] decmessage)
{
int bytescopied;
string label = "Private_Key";

int privKeyContext = crypt.CreateContext(crypt.UNUSED, crypt.ALGO_AES);

byte[] messagebuffer = new Byte[decmessage.Length];

int envelope = crypt.CreateEnvelope(crypt.UNUSED, crypt.FORMAT_AUTO);
privKeyContext = crypt.CreateContext(crypt.UNUSED, crypt.ALGO_AES);
bytescopied = crypt.PushData(envelope, decmessage);
crypt.SetAttributeString(privKeyContext, crypt.CTXINFO_LABEL, label);
crypt.DestroyContext(privKeyContext);
crypt.FlushData(envelope);
bytescopied = crypt.PopData(envelope, messagebuffer, messagebuffer.Length);

crypt.DestroyEnvelope(envelope);

return System.Text.Encoding.UTF8.GetString(messagebuffer);
}</pre>
<p>Bei Fragen, einfach einen Kommentar schreiben.</p>
<p>Grüße<br />
Benjamin Peters-Rumpf</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2009/11/09/cryptlib-tutorial-hilfe-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

