RJSKryp for JavaFX

Ich erstelle schon seit Jahren immer wieder verschiedene Varianten von einem Kodierungsprogramm, das ich unter dem Namen RJSKryp laufen lasse.
Mittlerweile gibt es verschiedenste Java-Varianten, die teils mit einer GUI, teils ohne GUI auskommen. Es vor einigen Wochen habe ich ja auch hier im Blog eine neue Version gepostet.

Durch die wachsende Popularität von JavaFX und vor allen Dingen das Erscheinen der Finalversion lag es nun für mich sehr nahe, eine Abwandlung auf Basis von JavaFX zu erstellen.

Die neue Version RJSKryp for JavaFX ist nun ein Kodierungsprogramm für beliebige Dateien, das in wesentlichen Punkten mit JavaFX Script erstellt wird (insbesondere die GUI). Für die konkreten Dateizugriffe wird Java selbst verwendet und es werden auch Swing-Komponenten direkt eingebunden. Man kann hier also auch das direkte Zusammenspiel zwischen JavaFX Script und Java erkennen.

Das Programm verwendet zum Kodieren und Dekodieren von Dateien wie die anderen Varianten einen Verschlüsselungs- und Entschlüsselungalgorithmus, der auf einer Verschiebung der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt: für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um einen festen Parameter versetztes Zeichen.

Hier ist nun ein Webstart-Aufruf für die Applikation
Auruf als Java-Applet über eine neue Webseite

Der Quelltext

RJSKryp.fx

/*
* RJSKryp.fx
*
* Created on 02.01.2009, 11:33:02
*/

package rjskryp;

import java.lang.System;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingHorizontalAlignment;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingSlider;
import javafx.ext.swing.SwingTextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
import javax.swing.JFileChooser;
import rjskryp.Kodier;

/**
* @author Ralph Steyer – RJS EDV-KnowHow – www.rjs.de
* Kodierungsprogramm mit JavaFX Script
*
* Hauptprogramm – die GUI im Wesentlichen mit JavaFX Script, die Kodierung selbst Java
*
* Das Programm verwendet zum Kodieren und Dekodieren von Dateien einen Verschlüsselungs-
* und Entschlüsselungalgorithmus, der auf einer Verschiebung
* der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
* Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
* Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
* für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
* einen festen Parameter versetztes Zeichen.
*/

var scale = 1.0;
var color = Color.SILVER;
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 10s
canSkip: true
values: [
scale => -1.0 tween Interpolator.EASEBOTH
color => Color.BLUE
]
}
]
}.play();
var f = new JFileChooser(); // Eine Swing-Komponente aus javax.swing

var label1=SwingLabel {
font:Font{
name:“Tahoma“
size: 25
}
text: „RJSKryp for JavaFX – Version 1.01 – www.rjs.de“
foreground:Color.SILVER
horizontalAlignment:SwingHorizontalAlignment.CENTER
width:600

}

var meinSlider=SwingSlider {
minimum: 0
maximum: 255
value: 3
vertical: false
}

var buttonGruppe=HBox{
spacing: 10
translateY:50
translateX:100
content:[
SwingButton {
text: „Kodieren“
action: function() {
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
if (ziel.exists()) then {
nachrichten1.text =
„Achtung! Zieldatei schon vorhanden. Vorgang wird abgebrochen“;
}
else {
nachrichten1.text =“Verarbeitung läuft“;
nachrichten2.text =““;
if (
new Kodier().kodiere(quelle, ziel, true,meinSlider.value) == 0) then {
nachrichten1.text =
„Verarbeitete Datei:n {quelle}“;
nachrichten2.text =
„Erstellte Datei:n {ziel}“;
}
else {
nachrichten1.text=“Fehler bei der Verarbeitung“;
}
}
}
}
else {
nachrichten1.text =““;
nachrichten2.text =““;

}

}
},
SwingButton {
text: „Dekodieren“
action: function() {
nachrichten1.text =“Verarbeitung läuft“;
nachrichten2.text =““;
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
new Kodier().kodiere(quelle, ziel, false,meinSlider.value);
}
}

}
},
SwingButton {
text: „Ende“
action: function() {
System.exit(0);
}
}
,
meinSlider
]

}
var verschiebung=SwingLabel {
text: bind „Verschiebungsfaktor: {meinSlider.value}“
foreground:Color.SILVER
translateX:400
translateY:80
font:Font{
name:“Tahoma“
size: 12
}
width:300
}
var nachrichten1=SwingTextField {
columns: 10
text: „“
editable: false
translateX:10
translateY:150
foreground:Color.RED
font:Font{
name:“Tahoma“
size: 12
}
width:575
height:20
background:Color.SILVER

}
var nachrichten2=SwingTextField {
columns: 10
text: „“
editable: false
translateX:10
translateY:170
foreground:Color.RED
font:Font{
name:“Tahoma“
size: 12
}
width:575
height:20
background:Color.SILVER

}

Stage {
title: „RJSKryp for JavaFX – Version 1.01 – www.rjs.de“
width: 600
height: 400
scene: Scene {
fill:RadialGradient {
centerX: 375
centerY: 175
radius: 390
proportional: false
stops: [
Stop {
offset: 0.0
color: Color.BLUE},
Stop {
offset: 1.0
color: Color.BLACK}
] // stops

} // RadialGradient
content: [VBox{
spacing: 10
content:[
label1
]
},
buttonGruppe,
verschiebung,
nachrichten1,
nachrichten2,

Text {
translateX:200
translateY:150

font: Font {
size: 14
}
x: 110,
y: 90
textAlignment: TextAlignment.CENTER
content:“RJS EDV-KnowHownnCopyright: Ralph SteyernInternet: www.rjs.de – www.javafx-buch.denBlog: rjsedv.blogspot.com“
fill: bind color
effect: DropShadow {
offsetX: 10
offsetY:5
color: Color.color(0.2, 0.2, 0.1)
}; // DropShadow
transforms: Scale{
x: 1
y: bind scale
pivotX: 100,
pivotY: 100
} // Scale
} //Text

]
}
visible:true
}

Kodier.java

package rjskryp;

/**
* @author Ralph Steyer – RJS EDV-KnowHow – www.rjs.de
* Kodierungsprogramm mit JavaFX Script
* Java-Klasse zur Bereitstellung der Dateizugriffe und der eigentlichen Kodierung
*/
import java.io.*;

public class Kodier {

/**
* Die Methode zum Kodieren und Dekodieren. Dazu wird ein Verschlüsselungs-
* und Entschlüsselungalgorithmus implementiert, der auf einer Verschiebung
* der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
* Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
* Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
* für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
* einen festen Parameter versetztes Zeichen.
*
* Als Übergabeargumente werden die Quelldatei und Zieldatei sowie ein Flag
* zur Steuerung, ob Kodieren oder Dekodieren, und die Verschiebung
* angegeben
*
* @param quelle2
* zu kodierende oder dekodierende Datei
* @param ziel2
* die Zieldatei mit dem veränderten Inhalt
* @param kodieren
* Angabe ob kodieren (true) oder dekodiern (false)
* @param verschiebung
* Faktor der Verschiebung
*/
public int kodiere(File quelle2, File ziel2, boolean kodieren,
int verschiebung) {
// Erstellen eines Eingabe- und eines
// Ausgabestroms.

// Quelle nur zum Lesen öffnen
RandomAccessFile quelle=null, ziel=null;
try {
quelle = new RandomAccessFile(quelle2, „r“);
ziel = new RandomAccessFile(ziel2, „rw“);
while (true) {
// Einlesen eines Bytes aus der Quelle
byte b = (byte) quelle.readByte();
/*
* Hier findet die Verschiebung statt. Wir kümmern uns selbst um
* den Wertebereich von dem Datentyp byte, indem wir den
* Modulo-Operator verwenden.
*/
if (kodieren)
b = (byte) ((b + verschiebung));
else
b = (byte) ((b – verschiebung));
// Schreiben eines Bytes in die Zieldatei
ziel.writeByte(b);
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
return 1;
}

// Dateiende der Quelldatei erreicht.
catch (EOFException e) {
try {
quelle.close();
ziel.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

return 0;
} catch (IOException e) {
return 2;
}

}

}

Kommentar verfassen