todo en memoria esta lejos de estar completo
y un parde fotitos
Código
package otpserver.simple; import java.awt.event.ActionEvent; import java.security.MessageDigest; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Base64; import java.util.Random; import javax.xml.bind.DatatypeConverter; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.*; import javafx.scene.text.Text; import javafx.scene.control.*; import javafx.stage.Stage; public class CounterApp extends Application { private final Text text = new Text(); private final Text codigoSecreto = new Text(); private boolean muestra = false; private void incrementCount() { try { instance.update((secreto +a).getBytes()); byte[] digest = instance.digest(); text.setText( LocalDateTime.now() +"\n"+ token.substring(0, 5) ); } } @Override public void start(Stage primaryStage) { for (int c = 0;c<4;c++) { secreto+=random.nextInt(9); } VBox root = new VBox(); root.getChildren().add(boton); root.getChildren().add(codigoSecreto); root.getChildren().add(text); Scene scene = new Scene(root, 200, 200); // longrunning operation runs on different thread @Override public void run() { @Override public void run() { incrementCount(); } }; while (true) { try { } // UI update is run on the Application thread Platform.runLater(updater); } } }); // don't let thread prevent JVM shutdown thread.setDaemon(true); thread.start(); boton.setOnAction(p->{ muestra=!muestra; if(muestra) codigoSecreto.setText(secreto); else codigoSecreto.setText("*****"); }); primaryStage.setTitle("Token Digital"); primaryStage.setScene(scene); primaryStage.show(); } launch(args); } }
Código
package otpserver.simple; import java.awt.event.ActionEvent; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Base64; import java.util.Optional; import java.util.Random; import javax.swing.JOptionPane; import javax.xml.bind.DatatypeConverter; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.*; import javafx.scene.text.Text; import javafx.scene.control.*; import javafx.stage.Stage; public class Login extends Application { private final PasswordField clave = new PasswordField(); private boolean tieneToken = false; @Override public void start(Stage primaryStage) { usuario.setPromptText("usuario"); token.setPromptText("token"); token.setVisible(false); VBox root = new VBox(); root.getChildren().add(usuario); root.getChildren().add(clave); root.getChildren().add(token); root.getChildren().add(boton); Scene scene = new Scene(root, 200, 200); // longrunning operation runs on different thread boton.setOnAction(p -> { if (usuario.getText().equals("admin") && clave.getText().equals("admin") && !tieneToken) { TextInputDialog dialog = new TextInputDialog(); dialog.setTitle("parear"); dialog.setHeaderText("parear"); // Traditional way to get the response value. Optional<String> result = dialog.showAndWait(); if (result.isPresent()) { tieneToken = true; token.setVisible(tieneToken); } // The Java 8 way to get the response value (with lambda expression). result.ifPresent(name -> { secretotoken=name; }); } if (usuario.getText().equals("admin") && clave.getText().equals("admin") && tieneToken) { try { instance.update((secretotoken +a).getBytes()); byte[] digest = instance.digest(); if(token.getText().equals(tokenProvar.substring(0,5))) { }else { } } } }); primaryStage.setTitle("Login"); primaryStage.setScene(scene); primaryStage.show(); } launch(args); } }







MOD: Enlaces a imágenes corregidos
Mod: Titulos descriptivos.