<?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>mGz developer blog &#187; kryptografia</title>
	<atom:link href="http://blog.mmx3.pl/category/kryptografia/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mmx3.pl</link>
	<description>right alt user, google maps guru, ajax, php</description>
	<lastBuildDate>Sat, 30 May 2009 17:27:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Szyfrowanie XOR One Time Pad</title>
		<link>http://blog.mmx3.pl/2008/03/02/szyfrowanie-xor-one-time-pad/</link>
		<comments>http://blog.mmx3.pl/2008/03/02/szyfrowanie-xor-one-time-pad/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 22:56:26 +0000</pubDate>
		<dc:creator>mmx3</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[kryptografia]]></category>
		<category><![CDATA[uczelnia]]></category>
		<category><![CDATA[Onetimepad]]></category>
		<category><![CDATA[Szyfrowanie]]></category>
		<category><![CDATA[XOR]]></category>

		<guid isPermaLink="false">http://blog.mmx3.pl/2008/03/02/szyfrowanie-xor-one-time-pad/</guid>
		<description><![CDATA[Idęą szyfrowania one time pad jest to, że do każdej wiadomości generujemy jednorazowy klucz długości tej wiadomości. Jest to sposób na szyfrowanie bardzo bezpieczne krótkich wiadomości.
Jedynym mankamentem samej metody jest fakt że przed przesłaniem zaszyfrowanej wiadomości musimy przesłać również klucz.
Implementacja

#include &#60;cstdlib&#62;
#include &#60;iostream&#62;
#include &#60;string&#62;
using namespace std;
void print_string(char string[], int len) {
int i=0;
while(i&#60;len){
 cout&#60;&#60;string[i];
 i++;
}
}
int main(int argc, [...]]]></description>
			<content:encoded><![CDATA[<p>Idęą szyfrowania one time pad jest to, że do każdej wiadomości generujemy jednorazowy klucz długości tej wiadomości. Jest to sposób na szyfrowanie bardzo bezpieczne krótkich wiadomości.</p>
<p>Jedynym mankamentem samej metody jest fakt że przed przesłaniem zaszyfrowanej wiadomości musimy przesłać również klucz.</p>
<p>Implementacja</p>
<pre>
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;
void print_string(char string[], int len) {
int i=0;
while(i&lt;len){
 cout&lt;&lt;string[i];
 i++;
}
}
int main(int argc, char *){
char key[20], msg[50], crypt[50], decrypt[50];
cout&lt;&lt;"podaj dlugosc klucza(0 to dl. wiadomosci): ";
int key_len;
cin&gt;&gt;key_len;
cout&lt;&lt;"podaj wiadomosc: ";
cin&gt;&gt;msg;
if(key_len==0) {
 key_len=strlen(msg);
}
int msg_len = strlen(msg);
srand((unsigned)time(0));
for(int i=0; i&lt;key_len; i++){
 key[i]=(char)(rand()%256);
}
cout&lt;&lt;"\n\n\nklucz: ";
print_string(key, key_len);
cout&lt;&lt;"\tdlugosc klucza: "&lt;&lt;strlen(key)-1&lt;&lt;"\tdlugosc wiadomosci: "&lt;&lt;strlen(msg)&lt;&lt;endl;
int i=0;
while(i&lt;msg_len){
 int cur_key_char=0;
 if(i&gt;strlen(key))
  cur_key_char = i % key_len ;
 crypt[i] = msg[i]^ key[cur_key_char];
 i++;
}
cout&lt;&lt;"\n\ncrypted:\n";
print_string(crypt, msg_len);
print_string(decrypt, msg_len);
int crypt_len = strlen(crypt);
cout&lt;&lt;"\n\nshould be:\n";
print_string(msg, msg_len);
i=0;
while(i&lt;msg_len){
 int cur_key_char=0;
 if(i&gt;strlen(key))
  cur_key_char = i % key_len ;
 decrypt[i] = crypt[i] ^ key[cur_key_char];
 i++;
}
cout&lt;&lt;"\n\ndecrypted:\n";
print_string(decrypt, msg_len);
cout&lt;&lt;"\n\n\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}</pre>
<p>Do pobrania również wersja skompilowana plus źródło: <a href="http://blog.mmx3.pl/wp-content/uploads/2008/03/one-time-pad.zip" title="Onetimepad XOR">Onetimepad XOR</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mmx3.pl/2008/03/02/szyfrowanie-xor-one-time-pad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementacja algorytmu RSA w C++</title>
		<link>http://blog.mmx3.pl/2008/02/19/implementacja-algorytmu-rsa-w-c/</link>
		<comments>http://blog.mmx3.pl/2008/02/19/implementacja-algorytmu-rsa-w-c/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 22:22:29 +0000</pubDate>
		<dc:creator>mmx3</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[kryptografia]]></category>

		<guid isPermaLink="false">http://blog.mmx3.pl/2008/02/19/implementacja-algorytmu-rsa-w-c/</guid>
		<description><![CDATA[ Witam,
Dzisiaj chciałbym przedstawić wam implementacje algorytmu RSA( Ronald Rivest, Adi Shamir, Leonard Adleman). Wykorzystując potężną bibliotekę LiDIA (strona domowa biblioteki: http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/)
Najpierw przedstawie algorytm:

Losujemy dwie duże(ok 1024 bity tj. Liczba składająca się z 300 cyfr) liczby pierwsze p i q, oraz liczbę e =  (p − 1)(q − 1).
Następnie obliczamy  (ponieważ wybraliśmy względnie [...]]]></description>
			<content:encoded><![CDATA[<p> Witam,</p>
<p>Dzisiaj chciałbym przedstawić wam implementacje algorytmu RSA( <a href="http://pl.wikipedia.org/wiki/Ronald_Rivest" title="Ronald Rivest">Ronald Rivest</a>, <a href="http://pl.wikipedia.org/wiki/Adi_Shamir" title="Adi Shamir">Adi Shamir</a>, <a href="http://pl.wikipedia.org/wiki/Leonard_Adleman" title="Leonard Adleman">Leonard Adleman</a>). Wykorzystując potężną bibliotekę LiDIA (strona domowa biblioteki: <a href="http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/" target="_blank">http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/</a>)</p>
<h3>Najpierw przedstawie algorytm:</h3>
<ol>
<li>Losujemy dwie duże(ok 1024 bity tj. Liczba składająca się z 300 cyfr) liczby pierwsze <span class="texhtml"><em>p</em></span> i <span class="texhtml"><em>q</em></span>, oraz liczbę <span class="texhtml"><em>e</em></span> =  <span class="texhtml">(<em>p</em> − 1)(<em>q</em> − 1)</span>.</li>
<li>Następnie obliczamy <img src="http://blog.mmx3.pl/wp-content/imagescaler/d4c444115e87f24449d94fe7a8b15972.png" class="tex" alt="d = e^{-1} \mod (p-1)(q-1)" imagescaler="http://blog.mmx3.pl/wp-content/imagescaler/d4c444115e87f24449d94fe7a8b15972.png" height="25" width="250" /> (ponieważ wybraliśmy względnie pierwsze <span class="texhtml"><em>e</em></span>, ma ono odwrotność i obliczyć ją możemy szybko rozszerzonym algorytmem Euklidesa)</li>
<li>W kolejnym kroku obliczamy n która jest iloczynem p i q</li>
<li>Klucz publiczny to para <span class="texhtml">(<em>e</em>,<em>n</em>)</span>, klucz prywatny zaś to para <span class="texhtml">(<em>d</em>,<em>n</em>)</span>. Liczby <span class="texhtml"><em>p</em></span> i <span class="texhtml"><em>q</em></span> należy zniszczyć.</li>
<li>Szyfrujemy wiadomość M za pomocą: c=m^e mod n (c- kryptogram, wiadomość zaszyfrowana = wiadomość m do potęgi e modulo n)</li>
<li>Żeby M zdeszyfrować podnosimy zaszyfrowaną wiadomość do potęgi <span class="texhtml"><em>d</em></span>. Zgodnie z twierdzeniem Eulera dostaniemy oryginalną wiadomość (o ile m nie jest wielokrotnością <em>p</em> lub <em>q</em>):  c^d = m^(ed) = m mod n</li>
</ol>
<h3>Implementacja:</h3>
<pre>
#include &lt;LiDIA/bigint.h&gt;
#include &lt;iostream&gt;using namespace std;
using namespace LiDIA;
bigint get_liczba() {
     bigint rand_liczba;
     bigint max = 1;
     shift_left(max, max, 1024); // powiększamy liczbę do 1024 bajtów wielkości
     do  {
       rand_liczba.randomize(max);
     }while(!is_prime(rand_liczba));
     return rand_liczba;
}
int main(){
    bigint p, q;
    // losowanie p i q
    do{
        p = get_liczba();
        q = get_liczba();
    }
    while(p==q);
    //licznie n
    bigint n;
    n = p * q;
    bigint fi;
    fi = (p-1)*(q-1);
    bigint u,v,e;
    do {
      e.randomize(fi);
      e++;
    }while(xgcd(u,v,e,fi)!=1);
    bigint m,c,de;
    m=50000; // nasza wiadomość
    cout&lt;&lt;"message: "&lt;&lt;m&lt;&lt;endl;
    if (u&lt;0){
      u=u%fi;
    }
    power_mod(c,m,e,n);
    cout&lt;&lt;"zaszyfrowane = "&lt;&lt;c&lt;&lt;endl&lt;&lt;endl;
    power_mod(de,c,u,n);
    cout&lt;&lt;"odszyfrowane = "&lt;&lt;de&lt;&lt;endl&lt;&lt;endl;
 }
</pre>
<h3>Kompilacja:</h3>
<pre>g++ -O test.cc -I/usr/local/include -L/usr/local/lib -o test -lLiDIA -lgmp -lm</pre>
<h3>Opis Funkcji:</h3>
<ul>
<li>bigint xgcd(bigint &amp; u, bigint &amp; v, const bigint &amp; a, const bigint &amp; b) &#8211; funkcja oblicza (a, b) = au + vb)</li>
<li>void power_mod (bigint &amp; res, const bigint &amp; a, const bigint &amp; n, const bigint m, int err = 0) &#8211; funkcja oblicza res = a^n (mod m)</li>
<li>void div_rem (bigint &amp; q, bigint &amp; r, const bigint &amp; a, const bigint &amp; b) &#8211; funkcja oblicza: q i r takie, że a = qb + r</li>
<li>bool is_prime (const bigint &amp; a, int n = 10) &#8211; funkcja zwraca wartość true jeśli a jest liczbą pierwszą(Prawdopodobieństwo tego, że a jest liczbą pierwszą jest nie mniejsze niż 1 &#8211; 1/(4^n) )</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mmx3.pl/2008/02/19/implementacja-algorytmu-rsa-w-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
