<?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[modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung]]></title><description><![CDATA[<p>Hi Leute,<br />
Ich schreibe zur zeit meine Facharbeit in Mathe über die RSA – Verschlüsselung. Ich bei ein Neuling in C++ habe jedoch ein paar Vorkenntnisse in C, deswegen seid mir nicht böse wenn ich mich ein wenig dumm anstelle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .<br />
Ich habe jetzt schon ein wenig gegoogelt und herausgefunden dass ich den Modulo von einer Double mit fmod berechnen kann, jedoch spuckt sie falsche Zahlen aus.</p>
<pre><code>int encode(int k,int e,int m)
{
    double v;
    v=pow(k, e);
    v=fmod(v,m);
    return v;
}
</code></pre>
<p>Das ist die Funktion, welche die Zahl k, mit der Formel v=k^e mod(m) verschlüsseln soll. Die Funktion muss mit recht großen Zahlen fertig werden doch irgendwie …<br />
Wenn ich für k=5, e=51 und m=943 einsetze spuckt die Funktion immer 560 aus, und nicht 569 wie es richtig wäre …<br />
Wäre echt super, wenn mir jemand helfen würde und vielen dank schon mal im voraus !<br />
LG KingHobo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323345/modulo-von-doubles-rsa-verschlüsselung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 11:08:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323345.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Jan 2014 22:38:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Sun, 26 Jan 2014 22:38:02 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
Ich schreibe zur zeit meine Facharbeit in Mathe über die RSA – Verschlüsselung. Ich bei ein Neuling in C++ habe jedoch ein paar Vorkenntnisse in C, deswegen seid mir nicht böse wenn ich mich ein wenig dumm anstelle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .<br />
Ich habe jetzt schon ein wenig gegoogelt und herausgefunden dass ich den Modulo von einer Double mit fmod berechnen kann, jedoch spuckt sie falsche Zahlen aus.</p>
<pre><code>int encode(int k,int e,int m)
{
    double v;
    v=pow(k, e);
    v=fmod(v,m);
    return v;
}
</code></pre>
<p>Das ist die Funktion, welche die Zahl k, mit der Formel v=k^e mod(m) verschlüsseln soll. Die Funktion muss mit recht großen Zahlen fertig werden doch irgendwie …<br />
Wenn ich für k=5, e=51 und m=943 einsetze spuckt die Funktion immer 560 aus, und nicht 569 wie es richtig wäre …<br />
Wäre echt super, wenn mir jemand helfen würde und vielen dank schon mal im voraus !<br />
LG KingHobo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379766</guid><dc:creator><![CDATA[KingHobo]]></dc:creator><pubDate>Sun, 26 Jan 2014 22:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Sun, 26 Jan 2014 22:46:24 GMT]]></title><description><![CDATA[<p>KingHobo schrieb:</p>
<blockquote>
<p>Das ist die Funktion, welche die Zahl k, mit der Formel v=k^e mod(m) verschlüsseln soll. Die Funktion muss mit recht großen Zahlen fertig werden doch irgendwie …</p>
</blockquote>
<p>loool. Nein, double ist keine Lösung. Double bedeutet 10 signifikante Ziffern und wenn die Zahl k^e aus 11 Ziffern besteht ist die letzte immer eine 0 (wegen der Ungenauigkeit von double) und damit ist das Modulo sinnlos.</p>
<p>Für RSA musst du k^e mod m schon schlauer berechnen.</p>
<p>Ich lass mal den folgenden Wikipedia-Artikel liegen:<br />
<a href="http://en.wikipedia.org/wiki/Exponentiation_by_squaring" rel="nofollow">http://en.wikipedia.org/wiki/Exponentiation_by_squaring</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379771</guid><dc:creator><![CDATA[loool]]></dc:creator><pubDate>Sun, 26 Jan 2014 22:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Sun, 26 Jan 2014 23:20:54 GMT]]></title><description><![CDATA[<p>Kennst du schon modular exponentiation? Das ist ziemlich trivial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379775</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 26 Jan 2014 23:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Sun, 26 Jan 2014 23:26:50 GMT]]></title><description><![CDATA[<p>Einfache Implementierung:</p>
<pre><code>#include &lt;iostream&gt;

unsigned modexp( unsigned base, unsigned exp, unsigned m )
{
	unsigned c = 1;

	for( unsigned i = 0; i != exp; ++i )
		(c *= base) %= m;

	return c;
}

int main()
{
	std::cout &lt;&lt; modexp(5, 51, 943);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2379776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379776</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 26 Jan 2014 23:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Sun, 26 Jan 2014 23:47:04 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Einfache Implementierung:<br />
...</p>
</blockquote>
<p>Aber auch etwas ineffizient. Am besten kombiniert man Modular Exponentiation mit Square-And-Multiply.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379780</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 26 Jan 2014 23:47:04 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Mon, 27 Jan 2014 09:10:36 GMT]]></title><description><![CDATA[<p>Erstmal vielen dank für euren schnellen Antworten ! Ich habe es mit Exponentiation by squaring versucht doch scheint es mir so als könnte ein Integer keine so große Zahl wie 5^51 sein … oder ich habe es falsch gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .<br />
Und an Arcoth, vielen dank, dein Lösungsansatz scheint da besser zu passen, da er die Zahl ja immer klein hält.<br />
Jedoch nochmal vielen dank an euch alle !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379810</guid><dc:creator><![CDATA[KingHobo]]></dc:creator><pubDate>Mon, 27 Jan 2014 09:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Mon, 27 Jan 2014 09:16:49 GMT]]></title><description><![CDATA[<p>Der Algorithmus den man da implementieren muss wenn du Zahlen &gt; 64 bit bzw sizeof(unsigned long long) verschlüsseln willst ist vermutlich noch nichts für dich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379813</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 27 Jan 2014 09:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Mon, 27 Jan 2014 09:16:56 GMT]]></title><description><![CDATA[<p>KingHobo schrieb:</p>
<blockquote>
<p>Ich habe es mit Exponentiation by squaring versucht doch scheint es mir so als könnte ein Integer keine so große Zahl wie 5^51 sein … oder ich habe es falsch gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .</p>
</blockquote>
<p>die idee ist es ja nicht dass du direkt binär potentierst (Exponentiation by squaring), sondern dass du dazwischen immer mod rechnest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379814</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 27 Jan 2014 09:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Mon, 27 Jan 2014 10:38:47 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>die idee ist es ja nicht dass du direkt binär potentierst (Exponentiation by squaring), sondern dass du dazwischen immer mod rechnest.</p>
</blockquote>
<p>Ja so hatte ich das auch schon verstanden, nachdem Arcoth mit Modular Exponentiation geantwortet hat und ich habe auch schon einen Algorithmus :</p>
<pre><code>int ModularExponentiation(int base, int exponent,int m) {
    if (exponent==0)
        return 1;
    if (exponent==1)
        return base;
    int a=ModularExponentiation(base,exponent/2,m);
    a=a*a;
    a=a%m;
    if (exponent%2==1)
         a=a*base;
         a=a%m;
    return a;
}
</code></pre>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Der Algorithmus den man da implementieren muss wenn du Zahlen &gt; 64 bit bzw sizeof(unsigned long long) verschlüsseln willst ist vermutlich noch nichts für dich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Naja deswegen frage ich ja auch hier ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379843</guid><dc:creator><![CDATA[KingHobo]]></dc:creator><pubDate>Mon, 27 Jan 2014 10:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Fri, 18 Apr 2014 04:29:20 GMT]]></title><description><![CDATA[<p>Keine Ahnung, ob noch relevant, aber:</p>
<p>Integer sind oftmals 32 Bit groß, und damit kann man maximal 2 hoch 32 Zahlen (2^32) darstellen. In unseren PCs sind es meistens die Zahlen von -(2^31) bis (2^31)-1 oder halt von 0 bis (2^32)-1<br />
Maximal bekommt man wohl im Normalfall 64 Bit, also 2^64. Sind ungefähr 18 Trillionen, also ungefähr 10^19 - auf alle Fälle zu wenig, um mit RSA arbeiten zu können.</p>
<p>Das interessante für das Potenzieren von großen Zahlen, wenn man dabei Modulo rechnen will, ist ja: Du kannst die Berechnung in kleinere Teile aufteilen.<br />
7^53 mod 77 ist 35. Wie kommt man da jetzt drauf, ohne wirklich 7^53 rechnen zu müssen? Schließlich ist das viel zu groß für unsere Computer. (Jedenfalls ohne spezielle Berechnungsgrundlagen.)<br />
Wichtig ist dabei folgende Grundlage:<br />
7^2 mod 77 = 49<br />
7^3 mod 77 = 35<br />
7^4 mod 77 = 17<br />
Und da können wir uns jetzt mal etwas angucken:<br />
7^4 = 7^(3+1) = 7^3 * 7^1<br />
Wenn wir jetzt die 7^3 durch (7^3 mod 77) ersetzten, kommen wir zu:<br />
35 * 7 = 245<br />
Das wieder modulo 77:<br />
245 mod 77 = 14<br />
Mh, kommt uns doch bekannt vor, oder? Stimmt, das ist das gleiche Ergebnis wie bei 7^4 mod 77.<br />
Das deutet bereits auf den Trick hin:<br />
x ^ (a+b) mod y = ((x^a mod y) * (x^b mod y)) mod y<br />
Somit können wir selbst gigantische Zahlen modulo rechnen, ohne auf spezielle Bibliotheken zurückgreifen zu müssen.</p>
<p>7^53 mod 77 =<br />
(7^32 mod 77 * 7^21 mod 77) mod 77 =<br />
(7^32 mod 77 * 7^16 mod 77 * 7^5 mod 77) mod 77 =<br />
(7^32 mod 77 * 7^16 mod 77 * 7^4 mod 77 * 7) mod 77 =<br />
(7^32 mod 77 * 7^16 mod 77 * 14 * 7) mod 77 =<br />
(7^32 mod 77 * 14^4 mod 77 * 14 * 7) mod 77 =<br />
(14^8 mod 77 * 14^4 mod 77 * 14 * 7) mod 77 =<br />
<em>[hier eben ausrechnen, was 14^2 mod 77 ist = 42]</em><br />
(42^4 mod 77 * 42^2 mod 77 * 14 * 7) mod 77 =<br />
<em>[Und hier eben 42^2 mod 77 = 70]</em><br />
(70^2 mod 77 * 70 * 14 * 7) mod 77 =<br />
<em>[Und hier noch 70^2 mod 77 = 49]</em><br />
(49 * 70 * 14 * 7) mod 77 =<br />
((49*70 mod 77) * (14*7 mod 77)) mod 77 =<br />
(42 * 21) mod 77 =<br />
<strong>35</strong></p>
<p>(Es gibt schnellere Wege, das ganze zu berechnen, erst recht für die hier verwendeten Zahlen 7, 53 und 77, aber dieses Beispiel sollte zeigen, wie es für jede Zahlenkombination funktioniert. Liegt an dir, dafür einen Weg zu finden. Die Potenzgesetze helfen da ziemlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>Die Erklärung von loool im ersten Teil seines Beitrags ist übrigens falsch: Die 11. Ziffer von Double ist nicht &quot;immer 0&quot;. Zum einen, ist die Genauigkeit von Double (mit 8 Byte) bei ungefähr 16 Stellen, zum anderen werden weitere Stellen nicht einfach 0, sondern sind durch die interne Darstellung der Zahlen als Dualzahl meistens irgendwas, weil die exakte Null an späteren Stellen (im Dezimalsystem) nicht so gut darstellbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395216</guid><dc:creator><![CDATA[Nova900]]></dc:creator><pubDate>Fri, 18 Apr 2014 04:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to modulo von doubles &#x2F;&#x2F; RSA Verschlüsselung on Fri, 18 Apr 2014 09:16:55 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Einfache Implementierung:</p>
<pre><code>for( unsigned i = 0; i != exp; ++i )
		(c *= base) %= m;
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<pre><code>for( unsigned i = 0; i != exp; ++i )
		c *= base, c %= m;
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395229</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 18 Apr 2014 09:16:55 GMT</pubDate></item></channel></rss>