Wie installiert man ein Java OpenJDK 17 auf einen Raspberry Pi Zero W?
Habe die Headlees 32-Bit Version installiert: … „Open JDK 17 auf einem Raspberry Pi Zero W installieren auf Bullseye Debian“ weiterlesen
Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Krypto und Blockchain
Wie installiert man ein Java OpenJDK 17 auf einen Raspberry Pi Zero W?
Habe die Headlees 32-Bit Version installiert: … „Open JDK 17 auf einem Raspberry Pi Zero W installieren auf Bullseye Debian“ weiterlesen
Hier hatte ich ja den Code veröffentlicht. Jetzt ist doch schon mehr los als vor Corona.
„Fast 9000 (-747) Flugzeuge in der Luft bei Block Nr. 732443“ weiterlesen
Habe ja vor ca. 5 Jahren mal ein Java-Programm dafür geschrieben.
Hier mal wieder ein aktueller Aufruf mit Echtzeit-Daten: „In welcher Höhe fliegen die 7168 Flugzeuge weltweit im Moment?“ weiterlesen
Nutzt jemand Log4J in Java? Wohl jeder;-) Z.B. Apple, Twitter und Tesla wie hier die Hacks gesammelt werden.
Dann mal schnell auf Version 2.15.0 updaten, die heute veröffentlicht wurde. Wegen dem Zero Day Exploit.
Auf Heise und auch hier auf dem Securityboulevard gibt es einen ausführlichen Artikel wie es geht. Und auch das BSI warnt nun mit Warnstufe Rot.
Vor 10 Tagen ist die neue Quarkus Version 2.5.1-Final erschienen. Das Update enthält fast 800 Commits. In den Releasenotes steht: „It is a safe upgrade for anyone already using 2.5.“. Dann sollte es bei der CO2-Ampel mit dem REST-Server keine großen umbauarbeiten geben. Ist das so? … „CO2-Ampel auf Quarkus 2.5.1-Final upgedated“ weiterlesen
Eben eine Neue Eclipse Version 2021-12 veröffentlicht. Die letzte in diesem Jahr. Wenn das kein Grund für ein Quicktest ist!
Alles OK beim meinem Blockchain Projekt und das bei BTC 48414 bzw. ETH 4196 🙂 … „Quicktest: Neue Eclipse Version 2021-12“ weiterlesen
TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL DB verwenden. Um nicht JUnit 5 zu vergessen.
Wir bauen nun mit Quarkus eine React Anwendung die Titel und das Datum von Mindmaps anzeigt und per REST bedient werden kann. Die GUI im Browser sieht dann so aus: „TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL“ weiterlesen
Warum wird in JUnit 5-Test kein public mehr verwendet? „Less is more“ sagt das JUnit-5 Team und die Testklassen liegen ja eh meistens im gleichen (Test) Package. Auch ist so eine besser Kapselung möglich.
Am 11. November letzten Jahres fürte der Ausfall von Infura dazu, dass viele zentrale Börsen die Abhebung von ETH und ERC20-Token gestoppt hatten. Zudem ließen sich Metamask, Uniswap und auch andere Anwendungen auf Ethereum nicht mehr nutzen. Infura scheint ein beliebter Dienstleister für Ethereum Nodes zu sein, auf den sich nicht nur kleinere Unternehmen und Projekte verlassen, sondern auch milliardenschwere Börsen wie Binance.
Für dieses Projekt soll dennoch mal die Infura-API verwendet werden, um den Kontostand einer ETH-Adresse zu ermitteln. Mit dem web3j Framework ist das auch in Java realisierbar. Hier der Architektur Aufbau:
Wir starten (wie immer) mit einem JUnit 5 Test: „ETH-Kontostand via Web3j und Infura mit Java in 5 Schritten abfragen“ weiterlesen
SSH Brute-Force mit Java. Gar nicht so schwierig wie hier beschrieben.
Die neue Version läuft jetzt nur noch mit Java 11. „SSH Brute-Force mit Java, picocli und TWHackSSH jetzt auf Java 11 umgestellt“ weiterlesen
Es muss ja nicht immer remix sein, um ein Smart-Contract zu compilieren. Es geht auch wie oben dargestellt mit einem Maven-Plugin (oder Gradle) um mit Ethereum-Netzwerk zu interagieren. Also wie können Solidity Smart Contracts kompiliert und dafür eine Java-Wrapper-Klassen dafür generiert werden?
Wir nehmen als Beispiel mein bekannter Smart-Contract Gehirn.sol der den IQ auf der Blockchain festhalten kann und mit Solidity programmiert ist und speichern in in dem src/main/resources Verzeichnis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @title Gehirn von Thomas Wenzlaff * @dev Mein Smart Contract mit solidity zum Speichern von IQ auf der Blockchain */ contract Gehirn { uint256 iq; constructor() public { // Mittelwert des IQ setzen iq = 100; } function setIQ(uint256 neuerIQ) public payable { iq = neuerIQ; } function getIQ() public view returns (uint256) { return iq; } function getBedeutung() public view returns (string memory) { if (iq <= 40) return "Keine Aussagekraft"; if (iq >= 41 && iq <= 70) return "Weit unterdurchschnittlich – Geistige Behinderung"; if (iq >= 71 && iq <= 79) return "unterdurchschnittlich"; if (iq >= 80 && iq <= 89) return "etwas unterdurchschnittlich"; if (iq >= 90 && iq <=109) return "Durchschnitt"; if (iq >= 110 && iq <=119) return "hoch"; if (iq >= 120 && iq <= 129) return "sehr hoch"; if (iq >= 130 && iq <= 159) return "hochbegabt"; if (iq > 160) return "Keine Aussagekraft"; } } |
Das Plugin wird mit mvn web3j:generate-sources gestartet und wie folgt in der pom.xml eingebunden: „Smart-Contract Wrapper für Java mit web3j-maven-plugin erstellen“ weiterlesen
Das Maven Plugin zum ausführen von Linux Befehlen wurde nun auf Java 11 umgestellt und die Version nach Maven Central hochgeladen.
Wie hier beschrieben noch ein Quicktest mit der neuen Version und ein ls:
1 |
mvn de.wenzlaff.command.maven.plugin:de.wenzlaff.command.maven.plugin:0.0.5:info -Dcommand="ls -ll" |
Ergebnis, sieht gut aus: „de.wenzlaff.command.maven.plugin: Neue Version auf Maven Central für Java 11 veröffentlicht und das bei BTC >60k$ (Block 705403)“ weiterlesen
Web3j ist ein sehr modularer und typsichere Library für Java und Android. Viele Module und Funktionen für das einfache arbeiten mit Smart-Contracts und Wallets auf der Ethereum-Blockchain (ETH), stehen bereit.
Hier nun ein kleines Beispiel, wie mit nur einer Java-Klasse und ein paar Zeilen Code ein eigenes File-Wallet im Json-Format erstellt werden kann. In einem weiteren Beitrag zeige ich dann, wie dieses File-Wallet in MetaMask importiert werden kann.
Folgende Abhängigkeiten sind in der pom.xml einzutragen, Web3j und die „alte“ (alt aber Apache) Json-Lib von Google, obwohl Web3j auch die Jackson Json Lib als transitive Abhängigkeit mitbringt. Es muss ja nicht immer Jackson sein 😉 „Java Ethereum Wallet mit Web3j erstellen“ weiterlesen
Mit dem TWAirLabs Programm, welches ich hier vorgestellt habe, können alle Flughäfen der Welt abgefragt werden. Dies geht mit dem Aufruf:
-k API-KEY -alle -l LÄNDER_KÜRZEL
Z.B. mal Japan mit seinen 138 Flughäfen:
-k API-KEY -alle -l jp
Ergebnis: „Welche Flughäfen und wieviele gibt es in DE, JP, US, RU …. ?“ weiterlesen
Ab Java 11 gibt es den HTTPClient im JDK der den REST Zugriff vereinfacht. Das ist mit einem Zweizeiler getan:
1 2 3 4 5 |
public static HttpResponse<String> getRequest(String url) throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).method("GET", HttpRequest.BodyPublishers.noBody()).build(); return HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); } |
Den Response kann man mit dieser Methode auswerten: „Zweizeiler REST HTTPClient am Beispiel von AirLabs für Planespotter“ weiterlesen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; /** * Dubletten Test. * * @author Thomas Wenzlaff * */ public class TestDoppelte { @Test void testDoppelteUndNullEntfernen() { System.out.println("----> Array mit Orten:"); List<String> orte = new ArrayList<>(); orte.add(null); orte.add(null); // doppelter Eintrag orte.add("Hannover"); orte.add("Langenhagen"); orte.add("Bremen"); orte.add("Bremen"); // doppelter Eintrag orte.stream().forEach(ort -> System.out.println(ort)); assertEquals(6, orte.size()); System.out.println("----> Entfernen von Dubletten mit HashSet:"); Set<String> orteSetOhneDublette = new HashSet<>(orte); orteSetOhneDublette.stream().forEach(ort -> System.out.println(ort)); assertEquals(4, orteSetOhneDublette.size()); System.out.println("----> Wieder zurück als Liste ohne die null Werte und anders sortiert:"); List<String> kopie = orteSetOhneDublette.stream().filter(Objects::nonNull).collect(Collectors.toList()); kopie.stream().forEach(ort -> System.out.println(ort)); assertEquals(3, kopie.size()); } } |
Ergebnis: „Java: Array von Dubletten und null entfernen mit HashSet und zurück“ weiterlesen
SSH Brute-Force mit Java. Gar nicht so schwierig.
Wir lesen eine Passwort- und eine Userdatei ein und machen ein connect zu einem SSH-Server mit jeder Kombination bis wir eine gültige Verbindung gefunden haben. Hier die Architektur inkl. JUnit-Testklassen: … „SSH Brute-Force mit Java, picocli und TWHackSSH“ weiterlesen
Mit automatischer Architektur validierung mit JUnit 5 Annotation @ArchTest von archunit kann leicht die Architektur vorgaben überprüft werden. Aber es kann auch leicht verhindert werden, das man z.B. System.out oder System.err verwendet. Oder das verhindert wird, das das interne Java Logging verwendet wird.
Was für mich auch wichtig ist, das der Logger immer LOG heißt, und nicht log oder logger.
Einfach diese JUnit-Test Klasse in alle Projekte einbinden. „Architektur mit archunit validieren“ weiterlesen
Gerade eben die Java Blockchain erweitert v0.0.3. Wer Lust hat mitzumachen kann gern Merge-Requests einreichen.
Gestern wurde ArchUnit in Version 0.18.0 veröffentlicht.
Wenn das keine Grund ist mal zu zeigen, wie man eine Package-Abhängigkeit überprüfen kann.
Also wir wollen einen Test schreiben, der durchläuft wenn nur aus dem Package blockchain auf das Package be zugegriffen wird. Wie hier im UML Diagramm gezeigt:… „ArchUnit gestern in Version 0.18.0 veröffentlicht oder wie validiere ich die Architektur am Beispiel einer Blockchain“ weiterlesen
Update ohne Probleme. JUnit Test läuft, was will man mehr… „Quicktest: Neue Version Eclipse 2021‑03 veröffentlicht – Better Than Ever“ weiterlesen
Hier ein neues Java-Programm TWProviders 1.0, das alle Sicherheitsprovider auf dem System (Raspberry Pi, Mac, Windows…) anzeigt. Mal so „just for fun“ programmiert, mal was anderes als Exchange-Lücken HAFNIUM – BSI ruft „IT-Bedrohungslage rot“. Es muss Java auf dem System installiert sein. Einfach das PrintProvider.class.zip (884 Byte) laden und das ZIP auspacken. Dann in dem Verzeichnis starten mit
java PrintProvider
Also das Programm laden, auspacken und starten:
1 2 3 |
wget http://blog.wenzlaff.de/wp-content/uploads/2021/03/PrintProvider.class.zip unzip PrintProvider.class.zip java PrintProvider |
Das sind z.B. die 12 von einem Raspberry Pi 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
java PrintProvider TWProviders 1.0 from www.wenzlaff.info prints all 12 Security Provider: SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; PKCS12, JKS & DKS keystores; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration) Sun RSA signature provider Sun Elliptic Curve provider (EC, ECDSA, ECDH) Sun JSSE provider(PKCS12, SunX509/PKIX key/trust factories, SSLv3/TLSv1/TLSv1.1/TLSv1.2/TLSv1.3/DTLSv1.0/DTLSv1.2) SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC, ChaCha20) Sun (Kerberos v5, SPNEGO) Sun SASL provider(implements client mechanisms for: DIGEST-MD5, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, CRAM-MD5, NTLM) XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory; C14N 1.0, C14N 1.1, Exclusive C14N, Base64, Enveloped, XPath, XPath2, XSLT TransformServices) Sun PC/SC provider JdkLDAP Provider (implements LDAP CertStore) JDK SASL provider(implements client and server mechanisms for GSSAPI) Unconfigured and unusable PKCS11 provider |
Mit diesm Programm kann nun auch leicht in einem Script oder in der Konsole nach Providern oder so gesucht werden, z.B. mit grep
java PrintProvider | grep Secure
Ergebnis:
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; PKCS12, JKS & DKS keystores; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
Sollte kein Java vorhanden sein, kommt es zu dieser Fehlermeldung. „TWProviders 1.0 – mal was anderes als HAFNIUM – Installierte Sicherheitsprovider anzeigen“ weiterlesen
Es ist bei Bitcoin sehr wichtig das Konzept zu verstehen, das man keine Online Verbindung für das generieren einer Bitcoion Wallet Adresse benötigt.
Das geht komplett Offline. Und ohne separaten Server, eine Webseite oder einen besonderen Service. Es wird nur etwas Mathe benötigt. Mit Java sind nur ein paar Zeilen nötig.
1. privaten Key erzeugen, dazu brauchen wir nur einen guten Zufallsgenerator der uns 32 Byte erzeugen kann. Könnte mal auch auswürfeln.
2. validieren ob der Key gültig ist
Hier der dokumentierte Code: … „Kryptowährung: Wir erzeugen uns heute mal einen privaten Bitcoin Key mit Java bevor der BTC Kurs auf über 50000 Dollar springt“ weiterlesen
Der public Key wird zunächst mit SHA-256 gehasht. Der Output dieser kryptografischen Hashfunktion wird dann mit RIPEMD-160 gehasht, einer anderen kryptografischen Hashfunktion, die als Output eine 160 Bit (20 Byte) lange Zahl erzeugt. Wir nennen diesen letzten Hash den public Key Hash (PKH). Wie hier im BPMN Flow dargestellt: … „Bitcoin: Public Key hashen mit SHA-256 und dann RIPEMD-160“ weiterlesen
Wie kann man für Bitcoin die geheimen Wörter, private und public Key und Adressen mit Java auf einem Raspberry Pi generieren? Hier mal ein Beispiel. Zuerst ein BPMN für den Überblick wie es läuft.
Das geht in 1 Minute, mit diesen drei Schritten auf der Komandozeile … „Java Bitcoin: BIP39 Mnemonic Generierung mit Adressen mit Java auf einem Raspberry Pi in 1 Minute – Crypto BPMN“ weiterlesen
Wer mal alle Security Provider im System ausgeben will, kann diese Methode verwenden:
1 2 3 4 5 6 7 8 |
private static Provider[] getSecurityProviders() { System.out.println("Alle " + Security.getProviders().length + " im System bekannten Security Provider:"); Provider[] provider = Security.getProviders(); for (int i = 0; i < provider.length; i++) { System.out.println(provider[i].getInfo()); } return provider; } |
Ergebnis auf einem Test-System: „Java: Ausgabe Methode aller im System bekannten Security Providers oder safety first“ weiterlesen
Wie können Hyperlinks in PDFs erzeugt werden?
Da die Klasse Link in iText 7.1 von der Text Klasse erbt, wie das UML oben zeigt, ist es einfach. Hier ein Beispiel:… „Neujahr 2021: Mein erster Beitrag in 2021 – Hyperlinks in PDF: iText 7.1“ weiterlesen
Ein PDF in Java ist mit iText 7 in ein paar Minuten gemacht.
Wir können z.B. ein String Liste mit nur 3 Zeilen Code mit dem Times Roman Font auf DIN A4 ausgeben:… „PDF Erzeugung mit iText 7 oder in 3 Zeilen Java zum PDF“ weiterlesen
Quicktest Eclipse 2020-12 die sich nun auch auf einem Raspberry Pi 3 oder 4 nativ ausführen läßt, ohne bremsenden x86-Emulator. Und was für mich wichtige ist, mit Korrekturen für macOS 11 alias Big Sur.
„Quicktest: Eclipse 2020-12 auch für native Raspberry Pi“ weiterlesen
Auf dem Rasberry Pi 4 ist ja default Java 11 installiert. Nun wollen wir mal schnell ein kleines Java Projekt mit Maven erstellen. Da ist schnell gemacht mit Archetype vom Maven.
Danke Dr.Kleinhirn.eu für die Bereitstellung der Mindmap
Also nur noch Maven 3.6.0 installieren mit: sudo apt-get install maven
Dann checken ob alles richtig installiert ist mit: mvn -version
Dann in einem leeren Verzeichnis „Mal was anderes als COVID-19 Impfstoff BNT162b2: Maven install auf einem Raspberry Pi 4 B mit Beispielprojekt in 10 Minuten mit Archetype“ weiterlesen