RSS

Archiv der Kategorie: Wissenschaft und Technik

RSA – Verschlüsselung in JAVA – Basiscode

Hier gibt es den RSA – Algorythmus in JAVA als Basiscode. Es gibt zwei Versionen:

  1. Bei der ersten Version werden zwei Primzahlen p1 und p2 nacheinander berechnet.
  2. Diese Version berechnet die Primzahlen p1 und p2 parallel. Dies ist dann von Vorteil, wenn Primzahlen mit BIT Größen > 2000 (diese Größe ist hardwareabhängig. Mein Rechner ist bei 2000 BIT noch schnell. Je weniger BIT umso schneller der Algorhytmus) errechnet werden sollen. Solche großen Primzahlen ergeben eine Schlüssellänge von mehr als 4000 BIT. Das macht praktisch vielleicht keinen Sinn, aber es ist ein Spaß, solche Zahlen am Computer zu sehen.

Nr 1:


import java.math.BigInteger;
import java.util.Random;

public class Multi {

public static void main(String[] args) {

final long START=System.currentTimeMillis();

Random rnd = new Random();

rnd.setSeed(2000);
BigInteger p1 = BigInteger.probablePrime( 2500 , rnd );
rnd.setSeed(2000);
BigInteger p2 = BigInteger.probablePrime( 2500 , rnd );

BigInteger e = new BigInteger( „65537“ );

//———————————————————————————————–

BigInteger phi = new BigInteger(p1.subtract(BigInteger.ONE)
.multiply(p2.subtract(BigInteger.ONE))
.toString(10));
BigInteger modul = new BigInteger(p1.multiply(p2)
.toString(10));
BigInteger key = new BigInteger(e.modInverse(phi)
.toString(10));

//———————————————————————————————–

BigInteger nachricht= new BigInteger(„9999999999″);

BigInteger chiffre = new BigInteger(nachricht.modPow(e, modul)
.toString(10));
BigInteger dechiffre= new BigInteger(chiffre.modPow(key, modul)
.toString(10));

//———————————————————————————————–

System.out.println(p1);
System.out.println(p2+“\n“);

System.out.println(„Modul „+modul+“ „+modul.bitLength()+“ BIT“);
System.out.println(„Privater Key „+key);
System.out.println(„\nNachricht „+nachricht+“ Chiffre „+chiffre+“ Dechiffre „+dechiffre);

final long ENDE=System.currentTimeMillis();
System.out.println(„Dauer „+(ENDE – START)+“ ms“);
}
}

import java.math.BigInteger;
import java.util.Random;

public class Mutli {

public static void main(String[] args) {

final long START=System.currentTimeMillis();

Random rnd = new Random();

rnd.setSeed(2000);
BigInteger p1 = BigInteger.probablePrime( 2500 , rnd );
rnd.setSeed(2000);
BigInteger p2 = BigInteger.probablePrime( 2500 , rnd );

BigInteger e = new BigInteger( „65537“ );

//———————————————————————————————–

BigInteger phi = new BigInteger(p1.subtract(BigInteger.ONE)
.multiply(p2.subtract(BigInteger.ONE))
.toString(10));
BigInteger modul = new BigInteger(p1.multiply(p2)
.toString(10));
BigInteger key = new BigInteger(e.modInverse(phi)
.toString(10));

//———————————————————————————————–

BigInteger nachricht= new BigInteger(„9999999999″);

BigInteger chiffre = new BigInteger(nachricht.modPow(e, modul)
.toString(10));
BigInteger dechiffre= new BigInteger(chiffre.modPow(key, modul)
.toString(10));

//———————————————————————————————–

System.out.println(p1);
System.out.println(p2+“\n“);

System.out.println(„Modul „+modul+“ „+modul.bitLength()+“ BIT“);
System.out.println(„Privater Key „+key);
System.out.println(„\nNachricht „+nachricht+“ Chiffre „+chiffre+“ Dechiffre „+dechiffre);

final long ENDE=System.currentTimeMillis();
System.out.println(„Dauer „+(ENDE – START)+“ ms“);
}
}


Nr 2:


import java.math.BigInteger;
import java.util.Random;

public class Multithread {

static BigInteger p1 = new BigInteger(„0“);
static BigInteger p2 = new BigInteger(„0“);

public static void main(String[] args) throws InterruptedException {

final long START=System.currentTimeMillis();

Thread t1 = new Thread ( new Number1() );
t1.start();

Thread t2 = new Thread ( new Number2() );
t2.start();

t1.join();
t2.join();

p1 = new BigInteger(Number1.zahl.toString(10));
p2 = new BigInteger(Number2.zahl.toString(10));

BigInteger e = new BigInteger( „65537“ );

BigInteger phi = new BigInteger(p1.subtract(BigInteger.ONE) .multiply(p2.subtract(BigInteger.ONE)) .toString(10));

BigInteger modul = new BigInteger(p1.multiply(p2)
.toString(10));

BigInteger key = new BigInteger(e.modInverse(phi)
.toString(10));

BigInteger nachricht = new BigInteger(„9999999999″);
BigInteger chiffre = new BigInteger(nachricht.modPow(e, modul) .toString(10));
BigInteger dechiffre= new BigInteger(chiffre.modPow(key, modul) .toString(10));

System.out.println(p1);
System.out.println(p2+“\n“);

System.out.println(„Modul „+modul+“ „+modul.bitLength()+“ BIT“);
System.out.println(„Privater Key „+key);
System.out.println(„\nNachricht „+nachricht+“ Chiffre „+chiffre+“ Dechiffre „+dechiffre);

final long ENDE=System.currentTimeMillis();
System.out.println(„Dauer „+(ENDE – START)+“ ms“);
}
}

class Number1 implements Runnable
{
static Random rnd = new Random();
static BigInteger zahl = new BigInteger(„0“);

@Override public void run()
{
rnd.setSeed(2000);
zahl = BigInteger.probablePrime(2500, rnd);
}
}

class Number2 implements Runnable
{

static Random rnd = new Random();
static BigInteger zahl = new BigInteger(„0“);

@Override public void run()
{
rnd.setSeed(2000);
zahl = BigInteger.probablePrime(2500, rnd);
}
}


Anmerkungen:

  • Die zweite Version ist bei großen Primzahlen nicht ganz doppelt so schnell, wie die erste.
  • Im Code sind rnd.seeds gesetzt, mit dem immer gleichen Wert von 2000. Dies dient dazu, dass immer wieder die gleiche Zufalls(Prim)zahl berechnet wird. Dadurch werden beide Versionen miteinander vergleichbar.
  • In diesen Beispielen werden Primazahlen mit 2.500 BIT Länge erzeugt. Das braucht auf meinem Recher bei Nr. 1 ca. 3,5 sec. Nr. 2 braucht 1,9 sec. (Vorsicht bei zu großer Bit Länge 😉 )

Wenn jemandem was hier zu einfällt, bitte mitteilen und viel Spaß ….

PS: Bitte niemals mit RSA-only eine reine Textverschlüssung durchführen. RSA ist ein asymetrisches Verschlüsselungsverfahren und vermeidet den Schlüsselaustausch bei symetrischen Verfahren. Deswegen werden Texte in der Praxis mit RSA in Kombination mit sysmetrischen Verfahren eingesetzt (z.B. AES).

Ich hafte nicht für die Anwendung dieses Codes. Es ist nur ein Muster.

 

Schlagwörter: , ,

60 Jahre alte Collatz Vermutung bewiesen?!!

Die Collatz Vermutung ist eine Annahme aus dem Bereich der Zahlentheorie der Mathematik. Sie ist ohne weiteres für den Laien verständlich :

(1) Man nehme eine ganze Zahl größer gleich 1

(2) Wenn die Zahl gerade (daher durch 2 ohne Rest teilbar) ist, teilen wir diese Zahl durch 2

(3) Wenn (2) nicht zutrifft (also eine ungerade Zahl vorliegt) multiplizieren wir zunächst mit 3 und addieren dann 1.

(4) Wiederhole die Schritte (2) und (3) immer wieder mit der sich aus der Folge ergebenden neuen Zahl.

(5) Vermutung: Die entstehende Folge von Zahlen endet immer bei 1. (Genauer: Die sich schließlich ergebende Zahlfolge ist immer: 1, 4, 2, 1, 4, 2, 1, …)

Beispiel:

Wir wählen als erste Zahl nach Schritt (1) die 10. 10 ist gerade. Also teilen wir gem. Schritt (2) durch 2. Es ergibt sich 5. 5 ist ungerade. Also nun Schritt (3): 3 x 5 + 1 = 16. 16 ist gerade. Nach Schritt (2) ergibt sch 8, dann 4, dann 2, dann 1. Ab der 1 wiederholt sich die Zahlenfolge unendlich mit den Elementen 1,4,2,1…

Diese Vermutung scheint nun von Gerhard Opfer bewiesen worden zu sein (Link hier). Der Beweis wird gerade der üblichen Prüfung unterzogen. Was es so interessant macht ist, dass der Beweis für den Nichtmathematiker außerordentlich schwierig zu verstehen ist (eigentlich ist er nicht verständlich), obgleich die zu beweisende Vermutung simpel ist. Das gleiche gilt auch für den Großen Fermatschen Satz. Oft ist es so, dass gerade aus der zunächst einfach erscheinenden Zahlentheorie sehr komplexe Beweise resultieren, die die unterschiedlichsten mathematischen Gebiete mit einander verknüpfen.

Das macht die Logik der Mathematik so faszinierend. Jedenfalls für mich Smiley

Zurück zur Collatz Vermutung. Ich wage hier eine weitere Vermutung:

Man erzeuge sämtliche Collatz Zahlenfolgen für jede Zahl n im Intervall 1 <= n < unendlich und zähle die Häufigkeit (Anzahl) H(m) der ermittelten Zahlen m, so gilt folgendes:

(1) H(m)>=1 für alle m <= n/2. Der Beweis hierfür ist übrigens trivial.

(2) Die kleinste Zahl für die gilt H(m)=0 ist die erste Zahl m für die gilt: m >=n/2 und m MOD 3=0

(3) Für sämtliche durch 3 teilbare Zahlen m im Intervall 1 <= m <= n gilt: H(m) für die geordnete Zahl m nimmt monoton ab, bis H(m) nach (2) gleich Null ist.

(4) (3) gilt nur für den Divisor 3.

(5) Für eine Zahl n, deren Collatz Zahlenfolge ermittelt wird, kann es keine Zahl m in der Zahlenfolge mit folgender Eigenschaft geben: m > n wobei m MOD 3 = 0 ist. Ich denke, auch dieser Punkt ist trivial.

Zwinkerndes Smiley Viel Spaß beim Nachdenken… Ah, vielleicht umfasst der Opfersche Beweis ja die Punkte (1) bis (5)… Für den Mathematiker wahrscheinlich eh alles trivial, aber egal.

… leider war der Beweis von Herrn Opfer nicht korrekt. Schade…

 

Schlagwörter: , ,

Visual Studio 2012 C++: Anwendungen weiter geben scheitert an fehlender MSVCR110D.DLL

Die oben genannte Fragestellung taucht öfter auf: Ein Programmierer erstellt mit VS C++ ein EXE-File. Er versucht dieses auf einem anderen Rechner zu starten und es erscheint:

„Das Programm kann nicht gestartet werden, da MSVCR110D.DLL auf dem Computer fehlt. Installieren Sie das Programm erneut, um das Problem zu beheben.“

Wie so oft, helfen solche WINDOWS Standard Meldungen nicht weiter.

(1) Eine MSVCR110D.DLL ist eine Degbug-Version und kann nicht weitergegeben werden. Das ‚D‘ hinter der 110 kennzeichnet das.

(2) Es ist keine gute Idee diese fehlende Datei einfach zu kopieren und in das Verzeichnis /system32 oder /SysWOW64 des Zielrechners einzufügen. Sie wird einfach nicht beachtet und es behebt die Fehlermeldung nicht.

(3) Als erstes sollte man auf dem Zielrechner das Microsoft Visual C++ 2010 SP1 Redistributable Package (x86) herunterladen und installieren, sofern es keine neuere Version gibt.

(4) Seit Ihr vielleicht ein Programmieranfänger? Habt Ihr vielleicht KEIN Release von dem Projekt erstellt? Habt Ihr versucht die Debug-EXE-Version (aus dem Verzeichnis DEBUG) von dem Projekt weiterzugeben? Wenn das zutrifft ist der Fehler klar. Eine Debug-Version kann man nicht weitergeben. 😉 Erstellt in MS Visual Studio 2012 von dem Projekt ein Release und probiert es erneut. Die Release-EXE liegt im RELEASE-Verzeichnis des Projekts. Wenn es dann nicht funktioniert, weiß ich nicht weiter.

Unbenanntes Bild

Tja und wie so oft der Schlusssatz:

Für Schäden, die aus der Anwendung dieser Hinweise entstehen, übernehme ich keine Haftung und Garantien. Der Anwender wird darauf hingewiesen, dass er die Hinweise in eigener Verantwortung befolgt und durchführt, falls er es denn tut. 😉

Gruß Maik

 

Schlagwörter: , , ,

WINDOWS 8 Apps starten nicht mehr

Einige User von Windows 8 berichten darüber, dass ihre Apps nach dem Start auf Metro nicht mehr starten, sondern gleich zu Metro zurückkehren. So auch bei mir.

Hierzu gibt es unterschiedliche Gründe:

a) Eine Firewall bzw. ein Antivirusprogramm, welches nicht von Microsoft ist, blockiert die Apps.

b) Eine Veränderung der Zugriffsrechte auf Ordnern im Netzwerk, insbesondere die im Heimnetzwerk durchgeführt wurden.

Während a) leicht lösbar ist, indem die ‘Fremdsoftware’ temporär deaktiviert wird, ist b) ein echtes Thema!

b) lässt sich nicht lösen durch das Verlassen des Heimnetzwerks

b) lässt sich nicht lösen durch ein Rückgängigmachen der Rechte, die man vorher eingeräumt hat.

b) lässt sich nicht lösen durch Wiederauffrischung des PCs. Achtung: Hier droht definitiv Datenverlust; ist mir selbst passiert. Also, vor Wiederauffrischung müssen wichtige Daten extern gesichert werden (USB-Stick, externes Harddrive, etc.).

b) Ich hatte das Problem auf zwei Rechnern durch die Veränderung der Zugriffsrechte auf Ordnern im Heimnetzwerk. Das Problem tauchte auf beiden Rechnern gleichzeitig auf, nachdem die Zugriffsrechte verändert wurden !!

Auf dem ersten Rechner gelang mir durch einen Systemwiederherstellungspunkt ein Reset, welcher, bis auf die Kindle-App, alle anderen wieder funktionsfähig machte.

Auf dem zweiten Rechner ging selbst das nicht. Er musste komplett neu aufgesetzt werden. Was das für eine Arbeit ist, weiß jeder, der das schon einmal gemacht hat.

Also WARNUNG: Ändert nicht die Zugriffsrechte im Heimnetzwerk bei WINDOWS 8. Das mögen die Apps überhaupt nicht. Mir ist keine vernünftige Korrektur bekannt. Es helfen auch nicht die Support-Apps von Microsoft bei diesem Problem. Meiner Meinung nach ist das ein echter, katastrophaler Bug!

Ich warte gern auf Kommentare zur Lösung dieses Themas (vielleicht durch WIN 8.1). Es ist sicher möglich, dass ich etwas übersehen habe…

Nachtrag 1: Ich habe Windows 8.1 Preview installiert. Dies behebt die Probleme. Allerdings ist die Installation dieses Betriebssystems nur Usern zu empfehlen, die sich gut mit Windows auskennen. Windows 8.1 Preview ist noch eine Testversion, in der noch Kompatibilitäten fehlen können bzw. andere Issues auftreten können. Zwinkerndes Smiley

Nachtrag 2: Das Windows 8.1 Preview läuft stabil. Bisher habe ich nur einen Fehler festgestellt: Die Helligkeit des Displays lässt sich nicht mehr sofort ändern. Änderungen werden nur nach einem Neustart aktiviert. Das ist für mich jedoch im Moment egal.

 
2 Kommentare

Verfasst von - 06/07/2013 in News, Wissenschaft und Technik

 

Schlagwörter: , , , ,

JAVA: Einfaches Programm zur grafischen Lösung von Differenzialgleichungen

Die Datei herunterladen: 

Link: Quellcode

Und den Quellcode einfach mit Copy/Paste in eine Java Entwicklungsumgebung (z.B. Eclipse) hineinkopieren. Die Klasse unter “Hauptprogramm” speichern. Es handelt sich nur um ein einfaches Programm. Aber man kann es natürlich zu mehr ausbauen. Verwendung findet das einfache Euler-Verfahren zur numerischen Lösung von Anfangswertproblemen gewöhnlicher Differenzialgleichungen. Der Button <PRINT> zeigt den Graphen der Differenzialgleichung. Der Button <DIFF> zeigt die Stammfunktion angenähert durch das Euler-Verfahren. <RICHT> zeigt eine Schar (n := Integer!) von Stammfunktionen der Differenzialgleichung definiert in dem Intervall y0 bis yn. Die Textfelder dienen zur Eingabe der entsprechenden Grenzen.

Die Verwendung des Codes und der darauf basierenden Programme ist ohne Gewähr und erfolgt auf eigene Verantwortung. Für Schäden aus der Anwendung des Quellkodes und der darauf basierenden Programme übernimmt der Verfasser keine Haftung. So etwas muss heute leider geschrieben werden.

 

Schlagwörter: , , , , , ,

Das Disclosure Project. In Deutschland so gut, wie unbekannt, oder nicht?

Um eines vorweg zu sagen: Es geht mir mit dem unten dargestellten Link nicht darum, zu zeigen, dass es UFOs etc. gibt. Wobei, die Definition von UFO ist nur ‚unbekanntes Flugobjekt‘. Diese gibt es sicherlich. Also müsste ich genauer formulieren in dem ich sage, UFOs als Resultat außerirdischen Lebens.

Es geht mir eher darum, dass ich einfach nichts von dieser Pressekonferenz in Deutschland mitbekommen habe. Wenn sich irgendein dahergelaufener Prommi verschluckt, ist dies schon eine Pressemeldung wert. Vom Disclosure Project? Nichts. Zumindest bei mir nichts und ich las und lese viel Nachrichten.

Youtube-Video:

Noch etwas in diesem Zusammenhang: Die gescheiterte Phobos 2 Marsmission. Hiervon wusste ich durch die Medien in Deutschland. Ich kann mich sogar gut daran erinnern, da bereits damals merkwürdig viele Marsmissionen gescheitert waren. Aber weiter habe ich nicht darüber nachgedacht. Zu Weihnachten 2012 bekomme ich nun ein Buch geschenkt. In diesem Buch wird auf die unten dargestellte Story verwiesen. Das erstaunliche ist auch hier, dass es in astronomischen Fachzeitschriften und deren Archiven keine Hinweise darauf gibt, dass die Sonde kurz vor ihrem Aus noch Bilder gesendet hat, die einigermaßen spektakulär sind.

Youtube-Video:

Ich denke, jeder sollte einmal reflektieren, was uns durch die Medien dargestellt wird. Kann es sein, dass es in unserer Demokratie mit Pressefreiheit etc. nur um Manipulation geht; und zwar Manipulation von uns, damit wir nicht erfahren, was wirklich vor sich geht?! Ich hoffe, ich liege falsch.

Aktuell zu Phobos-Grunt: http://www.astronews.com/news/artikel/2012/01/1201-011.shtml,

http://www.stern.de/wissen/absturz-von-phobos-raumsonde-bei-chile-erwartet-1773761.html

Medienmeldungen zu “Leben im Universum”: Kölner Stadtanzeiger: http://www.ksta.de/html/artikel/1326285631433.shtml, Spiegel: http://www.spiegel.de/wissenschaft/weltall/0,1518,808706,00.html

NASA korrigiert Kurs; http://www.20min.ch/wissen/news/story/NASA-bringt-Mars-Sonde-auf-Kurs-21960118

Jupiter Mond Europa: http://www.n-tv.de/wissen/See-auf-Jupitermond-entdeckt-article4793971.html

Marsmissionen von Außen sabotiert? http://www.spiegel.de/wissenschaft/weltall/0,1518,809228,00.html,  http://www.spiegel.de/wissenschaft/weltall/0,1518,808273,00.html sowie http://www.sz-online.de/nachrichten/artikel.asp?id=2960168

 

Schlagwörter: , , , , , , , , , , ,

Steve Jobs ist tot.

Gestern Nacht, dem 5. Oktober 2011 ist Steve Jobs – Gründer von Apple Inc. – an Krebs gestorben. Die Welt verliert damit einen Unternehmer der ultimativen Universumklasse. Unternehmertum, gekennzeichnet durch umsetzbare Vision, strategisches Denken, Handeln und Risikobereitschaft, repräsentierte Jobs, wie nur wenige. Selbst in seinen letzten Wochen hat er mit Hilfe einer klugen Vorgehensweise seinem Nachfolger den Grundstein für einen erfolgreichen Start gelegt. Es ist kein Zufall, dass kurz vor seinem Tod das Apple IPhone 4S vorgestellt worden ist. Dieses Smartphone hat generell eine enttäuschte Reaktion bei Kunden und an der Börse hervorgerufen. Und dies war beabsichtigt. Das IPhone 5 wäre mit Sicherheit noch der Genialität von Steve Jobs zugerechnet worden. Sein Nachfolger hätte damit eine hohe Hürde (zumindest auf kurzfristige Sicht) vorgefunden, mit nun folgenden Innovationen in die Fußstapfen von Jobs zu treten. Ich bin mir sicher: Das IPhone 5 existiert bereits und wird in 2012 vorgestellt werden.

Es bleibt die Frage, wie sich Apple langfristig entwickeln wird. Die Innovationskraft von Jobs war einmalig und ist nicht kopierbar. Die Smartphonegenerationen und Pads, die kommen werden, unterliegen softwaretechnisch einem gewaltigen Gegner. Dieser Gegner ist die kollektive Intelligenz des Internets, repräsentiert durch hunderttausende Entwickler, die an quelloffenen Systemen arbeiten (z.B. Android). Es wird also immer auf Hardwareinnovationen ankommen. Hier habe ich Zweifel, ob dies Apple langfristig gelingen wird. Ein gutes Negativbeispiel ist zur Zeit Nokia. Dieses Unternehmen erkannte den Mainstream zu spät und kriselt nun. Dies hätte man von 5-10 Jahren nicht erwartet.

http://www.apple.com

steve jobs

 

„Der Tod ist wohl die mit Abstand beste Erfindung des Lebens“, so Steve Jobs vor einiger Zeit. Weiterhin sagte er sinngemäß, dass der Tod damit den Wandel möglich macht. Ja, auch hier hat er Recht. Mein Beileid gilt allen, die Steve Jobs wirklich gekannt und gemocht haben.

… und auch Google zollt Respekt, was eigentlich alles aussagt:

googlesj

Schließen möchte ich mit einem –zumindest für mich- wunderbaren Zitat von Steve Jobs:

„Warum der Marine beitreten, wenn man Pirat sein kann?“

 
Ein Kommentar

Verfasst von - 06/10/2011 in News, Wissenschaft und Technik

 

Schlagwörter: , , , , , ,

 
%d Bloggern gefällt das: