Technologie
Menschen Wissenschaft Politik Mystery Kriminalfälle Spiritualität Verschwörungen Technologie Ufologie Natur Umfragen Unterhaltung
weitere Rubriken
PhilosophieTräumeOrteEsoterikLiteraturAstronomieHelpdeskGruppenGamingFilmeMusikClashVerbesserungenAllmysteryEnglish
Diskussions-Übersichten
BesuchtTeilgenommenAlleNeueGeschlossenLesenswertSchlüsselwörter
Schiebe oft benutzte Tabs in die Navigationsleiste (zurücksetzen).

Kryptographie & Kryptologie

76 Beiträge ▪ Schlüsselwörter: Kryptologie, Kryptographie ▪ Abonnieren: Feed E-Mail

Kryptographie & Kryptologie

02.10.2022 um 21:54
Gerade angemeldet und gleich fällt mir was ein dazu: Ich zerbrech mir schon länger den Kopf an einem Code den ich gefunden habe. leider weiß ich selber nicht was er bedeutet habe also auch keine "Musterlösung"

683156 698683833 6513278357 382 68136078 9216078 9086183172 59785461 97
357 4756868 235783 6916578 5461 6150c155757566 502645568357 901642 6078 8278756966758212 97
7178 646583 14 845478363 653178 8672 357 901344 235783 6916578 914 357 705712 4756868 97
357 908617860 647821 9386 59378 9216078 93316512 647960 5457 901368 5986 96418583 32 132169 506883178 55382 9075 357 507382 8669 59357 65511 97
55383831 602661 5950792 5457 9386 898068861441682 90122 5986 507490757883182
781633250

höchstwahrscheinlich auf Deutsch und könnte die wörter Heinrich Regina und Mutti enthalten. ich bin zu dumm für sowas. :(

PS: Was natürlich auffällt ist wie alles (oder fast alles ) mit 97 endet


1x zitiertmelden

Kryptographie & Kryptologie

11.10.2022 um 00:28
@Klopper
Wo hast du den gefuden? Ein paar nähere Hintergrundinfos wären toll!


melden

Kryptographie & Kryptologie

11.10.2022 um 00:58
Der Block fällt auf:
Zitat von KlopperKlopper schrieb am 02.10.2022:6150c155757566



melden

Kryptographie & Kryptologie

13.10.2022 um 11:12
@THX1138 ja, der fällt leider komplett aus dem Rahmen. könnte aber auch n Typo sein. Wenn das c nicht wäre, würde ich auf nen Substitutionscypher tippen bei dem ein Buchstabe auf ne zweistellige Zahl abgebildet wird. Man könnte mal ne Häufigkeitsanalyse machen, vielleicht reicht das schon. Fühle mich heute aber zu krank um das mal selber zu machen :)


1x zitiertmelden

Kryptographie & Kryptologie

15.10.2022 um 00:10
Zitat von alhambraalhambra schrieb:ja, der fällt leider komplett aus dem Rahmen. könnte aber auch n Typo sein. Wenn das c nicht wäre, würde ich auf nen Substitutionscypher tippen bei dem ein Buchstabe auf ne zweistellige Zahl abgebildet wird. Man könnte mal ne Häufigkeitsanalyse machen, vielleicht reicht das schon.
ja, ich sehe da zumindest Drei Punkte die dagegen sprechen sich Mühe zu machen;)


1x zitiertmelden

Kryptographie & Kryptologie

18.10.2022 um 12:53
Zitat von THX1138THX1138 schrieb am 15.10.2022:ja, ich sehe da zumindest Drei Punkte die dagegen sprechen sich Mühe zu machen;)
Und welche sind das?


melden

Kryptographie & Kryptologie

18.10.2022 um 13:59
es kann keine Abbildung von einem Buchstaben auf 2 Zahlen sein, da nicht alle Wörter eine gerade Anzahl an Zahlen haben. Jetzt wo ich nicht mehr erkältet bin, und wieder denken kann fällts mir auch auf


melden

Kryptographie & Kryptologie

29.10.2022 um 02:11
Das C ist kein Rechtschreibfehler! Ich kann es mir auch nicht erklären. Eine Idee von einem Bekannten war: Hat man C nur als CH und CK kodiert und nicht erwartet, dass man sehr selten auch C anders braucht (Computer, Corona usw.)? Und weil man es nicht schreiben konnte entschloss man sich, es halt so zu schreiben, weil es alleine ungefährlich ist.


melden

Kryptographie & Kryptologie

29.10.2022 um 02:18
Hier generell Gedanken, die ich mir gemacht habe:

  • 357 scheint ein häufigeres Wort zu sein
  • 9386, 6916578, 5457, 9216078, 4756868, 5986, 235783, 5950792 ist doppelt


wenn natürlich ein riesiges wörterbuch wo tausende Wörter nummeriert drin standen die Lösung ist ist es hoffnungslos. Aber vielleicht stehen die Zahlen auch für Buchstaben oder Silben


melden

Kryptographie & Kryptologie

25.11.2022 um 11:29
Kryptologen haben jetzt einen Brief von Karl V. geknackt. Anscheinend hat er sich einen Code ausgedacht bei dem ganze Wörter auf ein einzelnes Symbol abgebildet werden. Die Kryptologen haben daher selbst mit unserer modernen Technik n halbes Jahr gebraucht. Und viel Glück dazu.

https://www.golem.de/news/kryptografie-500-jahre-alter-geheimcode-von-karl-v-geknackt-2211-170032.html


1x zitiertmelden

Kryptographie & Kryptologie

25.11.2022 um 12:12
Zitat von alhambraalhambra schrieb:Die Kryptologen haben daher selbst mit unserer modernen Technik n halbes Jahr gebraucht.
Da würde mich mal interessieren, inwieweit man da KI einsetzen kann?

Also ich zeigt ihr einen solche Text und was ich sonst darüber weiß und sage: "Was heißt das?"

Gucky.


melden

Kryptographie & Kryptologie

25.11.2022 um 12:30
@Gucky87 in dem Fall wahrscheinlich nein.

KI lebt davon, das sie mit Beispielen trainiert wird. Wenn du einer KI also 1000 Texte in Cäsarverschlüsselung und die dazugehörigen Klartexte vorwirfst, dann kann du sie wahrscheinlich dazu bekommen Cäsarverschlüsselung mit einiger Wahrscheinlichkeit zu knacken.

In dem Fall existieren halt nur wenige Exemplare und keine Klartexte, so dass nix da ist mit dem man ne KI trainieren könnte.

Die Kryptologen konnten dieses Problem nur lösen, weil ein Brief aufgetaucht ist auf dem der Empfänger einzelne Klartext-Worte aufgeschrieben hatte. Und das war dann der Hebel zum lösen des Rätsels. Ansonsten wäre es unmöglich gewesen.


melden

Kryptographie & Kryptologie

25.11.2022 um 13:17
@alhambra
Und welche moderne Technik haben sie denn dabei eingesetzt?


melden

Kryptographie & Kryptologie

08.10.2023 um 16:16
@Yoshimitzu

Hallo, hier eine verschlüsselte Nachricht mit einem von mir selbst entwickelten Verschlüsselungsalgorithmus.

Tip: Die Nachricht umfasst unverschlüsselt 50 Zeichen:

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


melden

Kryptographie & Kryptologie

12.10.2023 um 02:00
Okay, derzeit bin ich an einem neuen Algorithmus dran.
Deswegen gibt es hier und jetzt den Code zum letzten Rätsel:

public class Encryptor
{
private static final int tagLengthBit = 128;
private static final int ivLengthByte = 12;
private static final int saltLengthByte = 16;
private static final String encryptAlgo = "AES/GCM/NoPadding";

// Encryption System - Return A Base64 Encoded 256bit AES Encrypted Text
public static String Encrypt(byte[] plainText, String password) throws Exception
{
// 16 byte salt
byte[] salt = CryptoUtils.GetRandomNonce(saltLengthByte);

// GCM recommended 12 bytes iv ?
byte[] iv = CryptoUtils.GetRandomNonce(ivLengthByte);

// secret key from password
SecretKey secretKey = CryptoUtils.GetAESKeyFromPassword(password.toCharArray(), salt);
Cipher cipher = Cipher.getInstance(encryptAlgo);

// AES-GCM needs GCMParameterSppec
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new GCMParameterSpec(tagLengthBit, iv));
byte[] cipherText = cipher.doFinal(plainText);

// prefix iv and salt to cypher text
byte[] cipherTextWithIvSalt = ByteBuffer.allocate(iv.length + salt.length + cipherText.length)
.put(iv)
.put(salt)
.put(cipherText)
.array();

// string representation, base64, send this string to other for decryption
return Base64.getEncoder().encodeToString(cipherTextWithIvSalt);
}
}

Da denkt ihr jetzt wahrscheinlich, was is'n daran besonders?
Das:

public class METGUI extends javax.swing.JFrame
{

private static final long serialVersionUID = 1L;

private static final String P01 = "~pCq;FNo5L?k?em;y/^Jb"; private static final String P02 = "5v8z57öz1+n52z=vfcj80";
private static final String P03 = "0n~cYsgkpTtKOMGr%-')4"; private static final String P04 = "*[NUk|^W7[c^EG)L2ZF>t";
private static final String P05 = "8vb^jp%^kU1y.<QI8}pTw"; private static final String P06 = "lbb@KBtr?3&.iiMUU(VM-";
private static final String P07 = "=rAx6F,lqYxv~8p>8h(C="; private static final String P08 = "w(l!8jQ(/54lpM6FlDwkC";
private static final String P09 = "56v22j8x^cc^n5jx15dcf"; private static final String P10 = "zR9Y9TfxttlxDD%sT`48{";
private static final String P11 = "Q1e`BF0c1f}X(mb@hfTv9"; private static final String P12 = "a6g1cXu0+oKpxXI>%X#gm";
private static final String P13 = "8*=pZ%xoy[!d!1kR:H(8h"; private static final String P14 = "An-Vn}Tk'V*mP`m3D&C,f";
private static final String P15 = "qA%^O90(,B)d)ln~ctNcI"; private static final String P16 = "Xa~]QU9SA1JPMQ<h=Fj8O";
private static final String P17 = "2?K]E.;*X+XhFZJmq:JXY"; private static final String P18 = "8G,Eav_&W'/i]$R,|WkK4";
private static final String P19 = "?'gFi*lWHWBHQT*JBnOE!"; private static final String P20 = "|3>y46_SkO>cw+{'o[Om-";

private static final String specPassword = "^E$Ii^Df@2Gx*2*q6+'wP";
private static final String masterPassword = "?|dd|6h*%cWFTG@`*)€)~";
private static String password = masterPassword;
private static final String ok = "The user has not abused the Tool.";
private static final String bad = "The user has abused the Tool.";
private static final String check = "Do not delete this file!";
private static final Charset UTF_8 = StandardCharsets.UTF_8;
private int grx2;


public METGUI() throws Exception
{
grx2 = 0;

ARB();
initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

FileChooser = new javax.swing.JFileChooser();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
Input = new javax.swing.JTextArea();
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
Output = new javax.swing.JTextArea();
Clear = new javax.swing.JButton();
AES = new javax.swing.JPanel();
Encrypt = new javax.swing.JButton();
Decrypt = new javax.swing.JButton();
Unique = new javax.swing.JPanel();
UniqueEncrypt = new javax.swing.JButton();
UniqueDecrypt = new javax.swing.JButton();
CopyInputButton = new javax.swing.JButton();
CopyOutputButton = new javax.swing.JButton();
PasteClipboardButton = new javax.swing.JButton();
InputCharsButton = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
InputCharsNum = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
OutputCharsNum = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
FileMenu = new javax.swing.JMenu();
OpenFile = new javax.swing.JMenuItem();
jSeparator4 = new javax.swing.JPopupMenu.Separator();
SaveInput = new javax.swing.JMenuItem();
SaveOutput = new javax.swing.JMenuItem();
jSeparator3 = new javax.swing.JPopupMenu.Separator();
Exit = new javax.swing.JMenuItem();
EditMenu = new javax.swing.JMenu();
CopyInputMenuItem = new javax.swing.JMenuItem();
CopyOutputMenuItem = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JPopupMenu.Separator();
PasteClipboardMenuItem = new javax.swing.JMenuItem();
jSeparator2 = new javax.swing.JPopupMenu.Separator();
ChangeMasterPassword = new javax.swing.JMenuItem();
ShowMasterPassword = new javax.swing.JMenuItem();
ResetMasterPassword = new javax.swing.JMenuItem();
InfoMenu = new javax.swing.JMenu();
AboutMenuItem = new javax.swing.JMenuItem();
HelpMenuItem = new javax.swing.JMenuItem();

FileChooser.setCurrentDirectory(new java.io.File("C:\\"));
FileChooser.setDialogTitle("Choose file...");

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.BELOW_TOP));

Input.setColumns(20);
Input.setLineWrap(true);
Input.setRows(5);
Input.setWrapStyleWord(true);
jScrollPane1.setViewportView(Input);

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 521, Short.MAX_VALUE)
);

jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.BELOW_TOP));

Output.setEditable(false);
Output.setColumns(20);
Output.setLineWrap(true);
Output.setRows(5);
Output.setWrapStyleWord(true);
jScrollPane2.setViewportView(Output);

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
);

Clear.setText("Clear Textfields");
Clear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ClearActionPerformed(evt);
}
});

AES.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "AES 256 Bit", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.BELOW_TOP));

Encrypt.setText("Encrypt");
Encrypt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
EncryptActionPerformed(evt);
}
});

Decrypt.setText("Decrypt");
Decrypt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
DecryptActionPerformed(evt);
}
});

javax.swing.GroupLayout AESLayout = new javax.swing.GroupLayout(AES);
AES.setLayout(AESLayout);
AESLayout.setHorizontalGroup(
AESLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AESLayout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(AESLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AESLayout.createSequentialGroup()
.addComponent(Decrypt)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(AESLayout.createSequentialGroup()
.addComponent(Encrypt, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)
.addGap(20, 20, 20))))
);
AESLayout.setVerticalGroup(
AESLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AESLayout.createSequentialGroup()
.addContainerGap()
.addComponent(Encrypt)
.addGap(18, 18, 18)
.addComponent(Decrypt)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

Unique.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Unique ~7250 Bit", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.BELOW_TOP));
Unique.setMinimumSize(new java.awt.Dimension(121, 101));

UniqueEncrypt.setText("Encrypt");
UniqueEncrypt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UniqueEncryptActionPerformed(evt);
}
});

UniqueDecrypt.setText("Decrypt");
UniqueDecrypt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
UniqueDecryptActionPerformed(evt);
}
});

javax.swing.GroupLayout UniqueLayout = new javax.swing.GroupLayout(Unique);
Unique.setLayout(UniqueLayout);
UniqueLayout.setHorizontalGroup(
UniqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(UniqueLayout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(UniqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(UniqueDecrypt, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(UniqueEncrypt, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
UniqueLayout.setVerticalGroup(
UniqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(UniqueLayout.createSequentialGroup()
.addContainerGap()
.addComponent(UniqueEncrypt)
.addGap(18, 18, 18)
.addComponent(UniqueDecrypt)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

CopyInputButton.setText("Copy Input");
CopyInputButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CopyInputButtonActionPerformed(evt);
}
});

CopyOutputButton.setText("Copy Output");
CopyOutputButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CopyOutputButtonActionPerformed(evt);
}
});

PasteClipboardButton.setText("Paste Clipboard");
PasteClipboardButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
PasteClipboardButtonActionPerformed(evt);
}
});

InputCharsButton.setText("Input Chars");
InputCharsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
InputCharsButtonActionPerformed(evt);
}
});

jButton2.setText("Output Chars");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

jLabel1.setText("Input Chars:");
jLabel1.setMaximumSize(new java.awt.Dimension(69, 14));
jLabel1.setMinimumSize(new java.awt.Dimension(69, 14));
jLabel1.setPreferredSize(new java.awt.Dimension(69, 14));

InputCharsNum.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
InputCharsNum.setText("0");

jLabel3.setText("Output Chars:");

OutputCharsNum.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
OutputCharsNum.setText("0");

FileMenu.setText("File");

OpenFile.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.ALT_MASK));
OpenFile.setText("Open File");
OpenFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OpenFileActionPerformed(evt);
}
});
FileMenu.add(OpenFile);
FileMenu.add(jSeparator4);

SaveInput.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.ALT_MASK));
SaveInput.setText("Save Input");
SaveInput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SaveInputActionPerformed(evt);
}
});
FileMenu.add(SaveInput);

SaveOutput.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK));
SaveOutput.setText("Save Output");
SaveOutput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SaveOutputActionPerformed(evt);
}
});
FileMenu.add(SaveOutput);
FileMenu.add(jSeparator3);

Exit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.ALT_MASK));
Exit.setText("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
}
});
FileMenu.add(Exit);

jMenuBar1.add(FileMenu);

EditMenu.setText("Edit");

CopyInputMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
CopyInputMenuItem.setText("Copy Input to Clipboard");
CopyInputMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CopyInputMenuItemActionPerformed(evt);
}
});
EditMenu.add(CopyInputMenuItem);

CopyOutputMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
CopyOutputMenuItem.setText("Copy Output to Clipboard");
CopyOutputMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CopyOutputMenuItemActionPerformed(evt);
}
});
EditMenu.add(CopyOutputMenuItem);
EditMenu.add(jSeparator1);

PasteClipboardMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
PasteClipboardMenuItem.setText("Paste from Clipboard to Input");
PasteClipboardMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
PasteClipboardMenuItemActionPerformed(evt);
}
});
EditMenu.add(PasteClipboardMenuItem);
EditMenu.add(jSeparator2);

ChangeMasterPassword.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.CTRL_MASK));
ChangeMasterPassword.setText("Change Master Password");
ChangeMasterPassword.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ChangeMasterPasswordActionPerformed(evt);
}
});
EditMenu.add(ChangeMasterPassword);

ShowMasterPassword.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
ShowMasterPassword.setText("Show Master Password");
ShowMasterPassword.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ShowMasterPasswordActionPerformed(evt);
}
});
EditMenu.add(ShowMasterPassword);

ResetMasterPassword.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.CTRL_MASK));
ResetMasterPassword.setText("Reset Master Password");
ResetMasterPassword.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ResetMasterPasswordActionPerformed(evt);
}
});
EditMenu.add(ResetMasterPassword);

jMenuBar1.add(EditMenu);

InfoMenu.setText("Info");

AboutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
AboutMenuItem.setText("About");
AboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
AboutMenuItemActionPerformed(evt);
}
});
InfoMenu.add(AboutMenuItem);

HelpMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK));
HelpMenuItem.setText("Help");
HelpMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
HelpMenuItemActionPerformed(evt);
}
});
InfoMenu.add(HelpMenuItem);

jMenuBar1.add(InfoMenu);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(AES, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Unique, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Clear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(CopyInputButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(CopyOutputButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(PasteClipboardButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(InputCharsButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(InputCharsNum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(OutputCharsNum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(AES, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Unique, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(CopyInputButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CopyOutputButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(PasteClipboardButton)
.addGap(18, 18, 18)
.addComponent(Clear)
.addGap(18, 18, 18)
.addComponent(InputCharsButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(InputCharsNum))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(OutputCharsNum))
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(20, 20, 20))
);

pack();
}// </editor-fold>

// Security Check
private void ARB()
{
try
{
File file = new File("C:\\MET\\MET.dat");
FileInputStream ft = new FileInputStream(file);
String temp;
try (DataInputStream in = new DataInputStream(ft))
{
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
temp = reader.readLine();
}

String erf = Decryptor.Decrypt(temp, specPassword);

if(erf.equals(check) || erf.equals(ok))
{
WriteToFile(0, ok);
}
else
System.exit(0);
}
catch(Exception ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "An Error occured: " + ex, "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}

// Write To File
private void WriteToFile(int element, String text) throws IOException, Exception
{
BufferedWriter writer;

switch(element)
{
case 0:
String temp = Encryptor.Encrypt(text.getBytes(UTF_8), specPassword);
writer = new BufferedWriter(new FileWriter("MET.dat"));
writer.write(temp);
writer.close();
break;
case 1:
writer = new BufferedWriter(new FileWriter("Input.txt"));
writer.write(Input.getText());
writer.close();
break;
case 2:
writer = new BufferedWriter(new FileWriter("Output.txt"));
writer.write(Output.getText());
writer.close();
break;
}
}

// Copy/Paste Function
private void CopyPaste(int option)
{
StringSelection stringSelection;
Clipboard clipboard;
Transferable transfer;

switch(option)
{
case 1:
stringSelection = new StringSelection(Input.getText());
clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
break;
case 2:
stringSelection = new StringSelection(Output.getText());
clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
break;
case 3:
clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
transfer = clipboard.getContents(this);

if(transfer == null)
{
return;
}
try
{
Input.setText((String)transfer.getTransferData(DataFlavor.stringFlavor));
CountInputChars();
}
catch(UnsupportedFlavorException | IOException ex)
{
Output.setText("An Error occured: " + ex);
}
}
}

// Count Input Chars
private void CountInputChars()
{
this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

int inputCounter = Input.getText().length();

InputCharsNum.setText("" + inputCounter);

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Count Output Chars
private void CountOutputChars()
{
this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

int outputCounter = Output.getText().length();

OutputCharsNum.setText("" + outputCounter);

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// AES Encrypt Button
private void EncryptActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

try
{
if(!Input.getText().isEmpty())
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
Output.setText(Encryptor.Encrypt(Input.getText().getBytes(UTF_8), password));
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
javax.swing.JOptionPane.showMessageDialog(null, "There is no Text to encrypt!", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
catch(Exception ex)
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
Output.setText("An Error occured: " + ex.toString());
}

Output.setCaretPosition(0);
CountInputChars();
CountOutputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// AES Decrypt Button
private void DecryptActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

try
{
String test = Input.getText();

if(!test.isEmpty())
Output.setText(Decryptor.Decrypt(test, password));
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
javax.swing.JOptionPane.showMessageDialog(null, "There is no Text to decrypt!", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
catch(Exception ex)
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
Output.setText("An Error occured: " + ex.toString());
grx2++;
}

if(grx2 >= 5)
{
try
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
WriteToFile(0, bad);
System.exit(0);
}
catch (Exception ex)
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
javax.swing.JOptionPane.showMessageDialog(null, "An Error occured: " + ex.toString());
}
}

Output.setCaretPosition(0);
CountOutputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Clear Button
private void ClearActionPerformed(java.awt.event.ActionEvent evt) {

Input.setText("");
Output.setText("");
CountInputChars();
CountOutputChars();
}

// Copy Input To Clipboard
private void CopyInputMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(1);
CountInputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Copy Output To Clipboard
private void CopyOutputMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(2);
CountOutputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Paste From Clipboard To Input
private void PasteClipboardMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(3);
CountInputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Info About The Program Version And Author
private void AboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

javax.swing.JOptionPane.showMessageDialog(null, "MET Message Encryption Tool (c) version 1.0\n\n"
+ "Author: Thanius", "Info...", javax.swing.JOptionPane.INFORMATION_MESSAGE);
}

// Change Master Password
private void ChangeMasterPasswordActionPerformed(java.awt.event.ActionEvent evt) {

String temp = null;

try
{
temp = javax.swing.JOptionPane.showInputDialog(null, "Please enter the "
+ "new Master Password for AES:\n\nIt must contain min. 21 chars "
+ "and max. 512 chars.\n");
}
catch(HeadlessException ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "An error occured,\nthe Password isn't changed:\n\n" + ex, "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}

if(temp == null)
{
//javax.swing.JOptionPane.showMessageDialog(null, "Input is empty!", "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}
else if(temp.length() < 21 || temp.length() > 512)
{
javax.swing.JOptionPane.showMessageDialog(null, "The new Master Password is too short/long!\n"
+ "The Master Password wasn't changed!", "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}
else
{
password = temp;
}
}

// Show Master Password
private void ShowMasterPasswordActionPerformed(java.awt.event.ActionEvent evt) {

if(password.equals(masterPassword))
{
javax.swing.JOptionPane.showMessageDialog(null, "The original Master Password cannot be displayed!\nOnly a changed Password can be shown.", "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}
else
{
Output.setText(password);
}
}

// Reset Master Password
private void ResetMasterPasswordActionPerformed(java.awt.event.ActionEvent evt) {

password = masterPassword;
javax.swing.JOptionPane.showMessageDialog(null, "Password reset successful.", "Password Reset", javax.swing.JOptionPane.INFORMATION_MESSAGE);
}

// Help
private void HelpMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

Output.setText(""
+ "********************************************************\n"
+ " HELP\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"
+ "********************************************************\n"
+ " FUNCTIONS\n"
+ "________________________________________\n\n"
+ "Encrypt AES & Unique:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Encrypts the Text in the Input Textfield and shows\n"
+ "the encrypted Text in the Output Textfield.\n\n"
+ "Decrypt AES & Unique:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Decrypts the Text in the Input Textfield and shows\n"
+ "the decrypted Text in the Output Textfield.\n\n"
+ "Copy Input to Clipboard:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Copy the Text in the Input Textfield to the Clipboard.\n"
+ "(For the use in other programs)\n\n"
+ "Copy Output to Clipboard:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Copy the Text in the Output Textfield to the Clipboard.\n"
+ "(For the use in other programs)\n\n"
+ "Paste from Clipboard to Input:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Paste the Text stored in the Clipboard to the Input Textfield.\n\n"
+ "Change Master Password:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Enter a new Master Password for better security.\n"
+ "(AES only)\n"
+ "You have to write down this password if you encrypt "
+ "a message with a new Master Password, otherwise "
+ "you won't be able to decrypt the encrypted Message.\n"
+ "The program don't save the changed Master Password "
+ "if you close the program, to ensure safety.\n\n"
+ "Show Master Password:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Shows the changed Master Password.\nThe original "
+ "Master Password will not show up.\n\n"
+ "Reset Master Password:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "Restore the original Master Password.\n"
+ "The original Master Password will be restored"
+ " on closing the program too.\n\n\n"
+ "********************************************************\n"
+ " HOW TO USE THIS TOOL PROPERLY ?\n"
+ "________________________________________\n\n"
+ "ENCRYPTION & DECRYPTION:\n\n"
+ "AES - Encryption:\n"
+ "°°°°°°°°°°°°°°°°°°°\n"
+ "This Tool works with a Master Password.\n"
+ "The Master Password is necessary to make a unique "
+ "AES Encryption.\n"
+ "The Password must be at minimum 21 chars and "
+ "at maximum 512 chars long, any character is allowed.\n"
+ "You can use the \"KGMET.jar\" Keygen,\n"
+ "(can be found in the same Directory as this Tool)\n"
+ "to generate a Password.\n"
+ "So your first thing to do is to change the "
+ "Master Password.\n"
+ "Click on the Menu \"Edit\" and choose the "
+ "Menu Item \"Change Master Password\".\n\n"
+ "BE AWARE :\n"
+ "You have to write down the new "
+ "Master Password, because this Tool don't save "
+ "the changed Master Password when you close this Tool.\n"
+ "You need the correct Master Password to decrypt a message "
+ "that was encrypted with this Tool, if you don't have the "
+ "correct Master Password, you won't be able to decrypt the message.\n"
+ "Even the NSA or the Author can't help you then.\n"
+ "This is necessary to ensure high security.\n\n"
+ "Next Step is the message, to copy a message from "
+ "another source you have to mark the message, "
+ "right-click and \"copy\" or mark the message and "
+ "use \"STRG+C\" instead, then use the Function in Menu "
+ "\"Edit\" -> \"Paste from Clipboard to Input\" "
+ "or click in the Input-Textfield and use \"STRG+V\" "
+ "to insert the message into the Input Textfield.\n"
+ "Otherwise just write the message in the Input "
+ "Textfield and click on the Button in the AES field \"Encrypt\".\n"
+ "The time to encrypt a message depends on how strong your CPU "
+ "is.\nThe length of the message doesn't really matter "
+ "in AES-Mode, but will in Unique-Mode.\n"
+ "To copy the encrypted message (for the use in other programs) "
+ "you have to use the Function in Menu "
+ "\"Edit\" -> \"Copy Output to Clipboard\".\n\n"
+ "UNIQUE - Encryption:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "It's the same procedure as with AES, but you don't have to "
+ "change the Master Password, because it's not needed in that "
+ "unique Encryption Algorithm.\n"
+ "But you have to read the following important Informations:\n\n"
+ "ATTENTION :\n"
+ "It's not recommended to encrypt messages larger than "
+ "a length of 1.024 chars (spaces included)!\n"
+ "(High CPU-, Memory-/Clipboard-Memory-, consumption!)\n"
+ "Example:\n"
+ "A message, that is 1.024 chars (spaces included) long, "
+ "will produce an encrypted message with a length "
+ "of up to or more than 380.000 chars.\n"
+ "A message with 512 chars will produce an encrypted "
+ "message with a length of up to or more than 220.000 chars.\n"
+ "A message with a single char will produce an "
+ "encrypted message with a length of up to or more "
+ "than 58.000 chars.\n\n"
+ "Even a Quantum Computer in the near future can't crack "
+ "that code, cause to the cosmic number of possibilities:\n\n"
+ "More than 100.000.000.000.000.000.000.000²\n"
+ "possibilities.\n\n"
+ "Decryption - AES & UNIQUE:\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n"
+ "AES only:\n"
+ "First at all, you have to change the Master Password "
+ "to the correct Master Password to decrypt an encrypted "
+ "message.\n\nBoth AES and Unique:\n"
+ "To copy an encrypted message into this Tool "
+ "you have to mark the message and right-click on \"copy\" or "
+ "mark the message and use \"STRG+C\".\nThen use the Function "
+ "in Menu \"Edit\" -> \"Paste from Clipboard to Input\" or "
+ "click on the Input-Textfield and use \"STRG+V\".\n"
+ "Click the Button \"Decrypt\" and you can read the "
+ "message in the Output Textfield.\n\n"
+ "********************************************************\n"
+ " END OF HELP\n"
+ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");

Output.setCaretPosition(0);
}

// Unique Encrypt Button
private void UniqueEncryptActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

try
{
if(!Input.getText().isEmpty())
{
String temp = Input.getText();
String temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P01);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P02);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P03);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P04);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P05);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P06);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P07);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P08);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P09);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P10);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P11);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P12);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P13);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P14);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P15);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P16);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P17);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P18);
temp2 = Encryptor.Encrypt(temp.getBytes(UTF_8), P19);
temp = Encryptor.Encrypt(temp2.getBytes(UTF_8), P20);

Output.setText(temp);
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
javax.swing.JOptionPane.showMessageDialog(null, "There is no Text to encrypt!", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}

}
catch(Exception ex)
{
Output.setText("An Error occured: " + ex.toString());
}

Output.setCaretPosition(0);
CountInputChars();
CountOutputChars();
}

// Unique Decrypt Button
private void UniqueDecryptActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

try
{
String test = Input.getText();

if(!test.isEmpty() )
{
String temp = Input.getText();
String temp2 = Decryptor.Decrypt(temp, P20);
temp = Decryptor.Decrypt(temp2, P19);
temp2 = Decryptor.Decrypt(temp, P18);
temp = Decryptor.Decrypt(temp2, P17);
temp2 = Decryptor.Decrypt(temp, P16);
temp = Decryptor.Decrypt(temp2, P15);
temp2 = Decryptor.Decrypt(temp, P14);
temp = Decryptor.Decrypt(temp2, P13);
temp2 = Decryptor.Decrypt(temp, P12);
temp = Decryptor.Decrypt(temp2, P11);
temp2 = Decryptor.Decrypt(temp, P10);
temp = Decryptor.Decrypt(temp2, P09);
temp2 = Decryptor.Decrypt(temp, P08);
temp = Decryptor.Decrypt(temp2, P07);
temp2 = Decryptor.Decrypt(temp, P06);
temp = Decryptor.Decrypt(temp2, P05);
temp2 = Decryptor.Decrypt(temp, P04);
temp = Decryptor.Decrypt(temp2, P03);
temp2 = Decryptor.Decrypt(temp, P02);
temp = Decryptor.Decrypt(temp2, P01);

Output.setText(temp);
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
javax.swing.JOptionPane.showMessageDialog(null, "There is no Text to decrypt!", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
catch(Exception ex)
{
Output.setText("An Error occured: " + ex.toString());
grx2++;
}

if(grx2 >= 5)
{
try
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
WriteToFile(0, bad);
System.exit(0);
}
catch (Exception ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "An Error occured: " + ex.toString());
}
}

Output.setCaretPosition(0);
CountOutputChars();
}

// Copy Input To Clipboard Button
private void CopyInputButtonActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(1);
CountInputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Copy Output To Clipboard Button
private void CopyOutputButtonActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(2);
CountOutputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Paste From Clipboard To Input Button
private void PasteClipboardButtonActionPerformed(java.awt.event.ActionEvent evt) {

this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

CopyPaste(3);
CountInputChars();

this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

// Input Chars Button
private void InputCharsButtonActionPerformed(java.awt.event.ActionEvent evt) {

CountInputChars();
}

// Output Chars Button
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

CountOutputChars();
}

// Open File
private void OpenFileActionPerformed(java.awt.event.ActionEvent evt) {

int returnVal = FileChooser.showOpenDialog(this);

if(returnVal == JFileChooser.APPROVE_OPTION)
{
File file = FileChooser.getSelectedFile();

try
{
Input.read(new FileReader(file.getAbsolutePath()), null);
}
catch(IOException ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "Error in accessing file:\n\n" + ex + "\n\n" + file.getAbsolutePath(), "ERROR", 0);
}
}

CountInputChars();
}

// Save Input Text To File
private void SaveInputActionPerformed(java.awt.event.ActionEvent evt) {

try
{
WriteToFile(1, null);
}
catch(Exception ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "An Error occured:\n\n" + ex, "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}

// Save Output Text To File
private void SaveOutputActionPerformed(java.awt.event.ActionEvent evt) {

try
{
WriteToFile(2, null);
}
catch(Exception ex)
{
javax.swing.JOptionPane.showMessageDialog(null, "An Error occured:\n\n" + ex, "ERROR", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}

// Exit Program
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {

System.exit(0);
}

// Main Function
public static void main(String args[])
{
java.awt.EventQueue.invokeLater(() ->
{
try
{
new METGUI().setVisible(true);
}
catch (Exception ex)
{
Logger.getLogger(METGUI.class.getName()).log(Level.SEVERE, null, ex);
}
});
}

Damit habe ich alles Notwendige reingestellt, auch wenn nicht viele User was damit anfangen können.
Aber es ist die Lösung zu meinem Rätsel. :)
Es ist der komplette Programmcode. ;)


melden

Kryptographie & Kryptologie

14.10.2023 um 22:29
@Yoshimitzu

Sorry, ich war zu langsam - ruf noch mal an.

Hier der Entschlüsselungscode:

public class Decryptor
{
private static final int tagLengthBit = 128;
private static final int ivLengthByte = 12;
private static final int saltLengthByte = 16;
private static final String encryptAlgo = "AES/GCM/NoPadding";
private static final Charset UTF_8 = StandardCharsets.UTF_8;

// Decryption System
public static String Decrypt(String cText, String password) throws Exception
{
byte[] decode = Base64.getDecoder().decode(cText.getBytes(UTF_8));

// get back the iv and salt from the cipher text
ByteBuffer bb = ByteBuffer.wrap(decode);

byte[] iv = new byte[ivLengthByte];
bb.get(iv);

byte[] salt = new byte[saltLengthByte];
bb.get(salt);

byte[] cipherText = new byte[bb.remaining()];
bb.get(cipherText);

// get back the AES key from the same password and salt
SecretKey secretKey = CryptoUtils.GetAESKeyFromPassword(password.toCharArray(), salt);
Cipher cipher = Cipher.getInstance(encryptAlgo);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new GCMParameterSpec(tagLengthBit, iv));
byte[] plainText = cipher.doFinal(cipherText);

return new String(plainText, UTF_8);
}


melden

Ähnliche Diskussionen
Themen
Beiträge
Letzte Antwort
Technologie: Unknackbare Verschlüsselung
Technologie, 125 Beiträge, am 18.01.2015 von Heizenberch
Carlo am 04.02.2014, Seite: 1 2 3 4 5 6 7
125
am 18.01.2015 »
Technologie: " Kryptos " verschlüsselte Botschaften entschlüsseln
Technologie, 19 Beiträge, am 10.05.2015 von Lightstorm
BigBangII am 13.10.2013
19
am 10.05.2015 »
Technologie: Das Magazin Cryptolog der NSA ist online
Technologie, 13 Beiträge, am 04.05.2013 von Herbert41
Branntweiner am 29.03.2013
13
am 04.05.2013 »