Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.32 KB | None | 0 0
  1. import javafx.application.Application;
  2. import javafx.stage.Stage;
  3. import javafx.scene.Group;
  4. import javafx.scene.Scene;
  5. import javafx.scene.paint.Color;
  6. import javafx.scene.text.Text;
  7. import javafx.scene.control.TextArea;
  8. import javafx.scene.control.PasswordField;
  9. import javafx.scene.layout.GridPane;
  10. import javafx.scene.control.Button;
  11. import javafx.geometry.Pos;
  12. import javafx.event.*;
  13. import javafx.scene.input.MouseEvent;
  14. import javafx.scene.image.Image;
  15. import javafx.scene.image.ImageView;
  16. import javafx.geometry.HPos;
  17. import javafx.scene.layout.StackPane;
  18. import javafx.geometry.Insets;
  19. import javafx.scene.text.Font;
  20. import javafx.scene.effect.DropShadow;
  21. import javafx.stage.FileChooser;
  22. import java.io.File;
  23. import java.util.Scanner;
  24. import java.io.FileWriter;
  25.  
  26. public class Window extends Application {
  27.  
  28. private boolean fileFlag = false;
  29. private String filePath;
  30.  
  31.  
  32. @Override
  33. public void start(Stage primaryStage) throws Exception {
  34. System.out.println(System.getProperty("user.dir"));
  35. //text labels
  36. Text t1 = new Text("Enter text to encrypt or decrypt: ");
  37. Text t2 = new Text("Enter the key to use for encryption or decrytion: ");
  38. Text t3 = new Text("Or select a file: ");
  39.  
  40. //input and output text areas
  41. TextArea textInputArea = new TextArea();
  42. PasswordField keyInputField = new PasswordField();
  43. TextArea textOutputArea = new TextArea();
  44.  
  45. //set text area properties
  46. textInputArea.setWrapText(true);
  47. textOutputArea.setWrapText(true);
  48. textOutputArea.setEditable(false);
  49. textInputArea.setPromptText("Enter text here");
  50. keyInputField.setPromptText("Enter cipher key here");
  51. textInputArea.setFocusTraversable(false);
  52. keyInputField.setFocusTraversable(false);
  53. textInputArea.setFont(Font.font("Verdana", 14));
  54. keyInputField.setFont(Font.font("Verdana", 14));
  55. textOutputArea.setFont(Font.font("Verdana", 14));
  56.  
  57. //encrypt and decrypt buttons
  58. Button btnEncrypt = new Button("Encrypt");
  59. Button btnDecrypt = new Button("Decrypt");
  60.  
  61. //button size
  62. btnEncrypt.setMinSize(100, 50);
  63. btnDecrypt.setMinSize(100, 50);
  64.  
  65.  
  66. //set style
  67. t1.setStyle("-fx-font: normal bold 15px 'Arial'");
  68. t2.setStyle("-fx-font: normal bold 15px 'Arial'");
  69. t3.setStyle("-fx-font: normal bold 15px 'Arial'");
  70.  
  71. btnEncrypt.setStyle("-fx-background-color: rgb(98,131,149); -fx-text-fill: white;");
  72. btnDecrypt.setStyle("-fx-background-color: rgb(98,131,149); -fx-text-fill: white;");
  73.  
  74. Button btnSlctFile = new Button("Select File");
  75. btnSlctFile.setStyle("-fx-background-color: rgb(98,131,149); -fx-text-fill: white;");
  76. FileChooser fileChooser = new FileChooser();
  77. fileChooser.getExtensionFilters().addAll(
  78. new FileChooser.ExtensionFilter("Text Files", "*.txt")
  79. );
  80.  
  81. btnSlctFile.setOnMouseClicked(new EventHandler<MouseEvent>() {
  82. public void handle(MouseEvent event) {
  83. File selectedFile = fileChooser.showOpenDialog(primaryStage);
  84. if (selectedFile != null) {
  85. fileFlag = true;
  86. btnSlctFile.setText(selectedFile.getName());
  87. filePath = selectedFile.toString();
  88. textInputArea.clear();
  89. }
  90. }
  91. });
  92.  
  93. btnEncrypt.setOnMouseClicked(new EventHandler<MouseEvent>() {
  94. public void handle(MouseEvent event) {
  95. if (fileFlag) {
  96. try {
  97. File file = new File(filePath);
  98. Scanner sc = new Scanner(file);
  99. sc.useDelimiter("\\Z");
  100. String text = sc.next();
  101. String key = keyInputField.getText();
  102. if (key.length() != 0 && text.length() != 0) {
  103. FileWriter fw = new FileWriter(filePath);
  104. fw.write(VigenereCipher.encrypt(text, key));
  105. fw.close();
  106. textOutputArea.setText("File Encrypted");
  107. }
  108. } catch (Exception e) {
  109. System.out.println(e);
  110. }
  111. fileFlag = false;
  112. btnSlctFile.setText("Select File");
  113. } else {
  114. String text = textInputArea.getText();
  115. String key = keyInputField.getText();
  116. if (key.length() != 0 && text.length() != 0) {
  117. textOutputArea.setText(VigenereCipher.encrypt(text, key));
  118. }
  119. }
  120. }
  121. });
  122.  
  123. btnDecrypt.setOnMouseClicked(new EventHandler<MouseEvent>() {
  124. public void handle(MouseEvent event) {
  125. if (fileFlag) {
  126. try {
  127. File file = new File(filePath);
  128. Scanner sc = new Scanner(file);
  129. sc.useDelimiter("\\Z");
  130. String text = sc.next();
  131. String key = keyInputField.getText();
  132. if (key.length() != 0 && text.length() != 0) {
  133. FileWriter fw = new FileWriter(filePath);
  134. fw.write(VigenereCipher.decrypt(text, key));
  135. fw.close();
  136. textOutputArea.setText("File Decrypted");
  137. }
  138. } catch (Exception e) {
  139. System.out.println(e);
  140. }
  141. fileFlag = false;
  142. btnSlctFile.setText("Select File");
  143. } else {
  144. String text = textInputArea.getText();
  145. String key = keyInputField.getText();
  146. if (key.length() != 0 && text.length() != 0) {
  147. textOutputArea.setText(VigenereCipher.decrypt(text, key));
  148. }
  149. }
  150. }
  151. });
  152.  
  153. btnSlctFile.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() {
  154. @Override
  155. public void handle(MouseEvent e) {
  156. DropShadow shadow = new DropShadow();
  157. btnSlctFile.setEffect(shadow);
  158. }
  159. });
  160.  
  161. btnSlctFile.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() {
  162. @Override
  163. public void handle(MouseEvent e) {
  164. btnSlctFile.setEffect(null);
  165. }
  166. });
  167.  
  168. btnEncrypt.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() {
  169. @Override
  170. public void handle(MouseEvent e) {
  171. DropShadow shadow = new DropShadow();
  172. btnEncrypt.setEffect(shadow);
  173. }
  174. });
  175.  
  176. btnEncrypt.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() {
  177. @Override
  178. public void handle(MouseEvent e) {
  179. btnEncrypt.setEffect(null);
  180. }
  181. });
  182.  
  183. btnDecrypt.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() {
  184. @Override
  185. public void handle(MouseEvent e) {
  186. DropShadow shadow = new DropShadow();
  187. btnDecrypt.setEffect(shadow);
  188. }
  189. });
  190.  
  191. btnDecrypt.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() {
  192. @Override
  193. public void handle(MouseEvent e) {
  194. btnDecrypt.setEffect(null);
  195. }
  196. });
  197.  
  198. GridPane gp = new GridPane();
  199. gp.setAlignment(Pos.CENTER);
  200. gp.add(btnEncrypt, 0, 0);
  201. gp.add(btnDecrypt, 1, 0);
  202. gp.setHgap(30);
  203.  
  204. GridPane gpFile = new GridPane();
  205. //gpFile.setAlignment(Pos.CENTER);
  206. gpFile.add(t3, 0, 0);
  207. gpFile.add(btnSlctFile, 1, 0);
  208. gp.setHgap(15);
  209.  
  210.  
  211. Image image = new Image("/images/logo.jpg");
  212. ImageView imageView = new ImageView(image);
  213. imageView.setPreserveRatio(true);
  214. imageView.setFitWidth(175);
  215.  
  216. StackPane topPane = new StackPane();
  217. topPane.getChildren().add(imageView);
  218. topPane.setStyle("-fx-background-color: rgb(98,131,149);");
  219.  
  220. GridPane gridPane = new GridPane();
  221. //gridPane.setMinSize(500, 650);
  222. gridPane.setVgap(10);
  223. gridPane.setHgap(20);
  224. gridPane.setAlignment(Pos.CENTER);
  225. gridPane.setStyle("-fx-background-color: rgb(174, 194, 209);");
  226.  
  227. //posistion elements
  228. gridPane.add(topPane, 0, 0);
  229. GridPane.setFillHeight(topPane, true);
  230. GridPane.setFillWidth(topPane, true);
  231. gridPane.add(t1, 0, 1);
  232. gridPane.add(textInputArea, 0, 2);
  233. gridPane.add(gpFile, 0, 3);
  234. gridPane.add(t2, 0, 4);
  235. gridPane.add(keyInputField, 0, 5);
  236. gridPane.add(gp, 0, 6);
  237. gridPane.add(textOutputArea, 0, 7);
  238.  
  239. gridPane.setHalignment(imageView, HPos.CENTER);
  240. gridPane.setMargin(t1, new Insets(5, 10, 0, 10));
  241. gridPane.setMargin(textInputArea, new Insets(0, 10, 0, 10));
  242. gridPane.setMargin(t2, new Insets(5, 10, 0, 10));
  243. gridPane.setMargin(keyInputField, new Insets(0, 10, 0, 10));
  244. gridPane.setMargin(textOutputArea, new Insets(5, 10, 10, 10));
  245. gridPane.setMargin(t3, new Insets(5, 10, 0, 10));
  246.  
  247.  
  248.  
  249. Scene scene = new Scene(gridPane);
  250. primaryStage.setTitle("Vigenere Cipher");
  251. primaryStage.setScene(scene);
  252. primaryStage.setResizable(false);
  253. primaryStage.show();
  254.  
  255. }
  256.  
  257. }
  258.  
  259.  
  260. class VigenereCipher {
  261.  
  262. private static String vigenere(String text, String key, boolean encrypt) {
  263. int iText = 0, iKey = 0;
  264. key = genKey(text, key).toUpperCase();
  265. String resulttext = "";
  266.  
  267. while (iText < text.length()) {
  268. char c = Character.toUpperCase(text.charAt(iText));
  269. if (c >= 'A' && c <= 'Z') {
  270. if (encrypt) c = (char) ((c + key.charAt(iKey)) % 26 + 'A');
  271. else c = (char) (mod(c - key.charAt(iKey), 26) + 'A');
  272. if (Character.isUpperCase(text.charAt(iText))) {
  273. resulttext += c;
  274. } else {
  275. resulttext += Character.toLowerCase(c);
  276. }
  277. iKey++;
  278. } else {
  279. resulttext += c;
  280. }
  281. iText++;
  282. }
  283. return resulttext;
  284. }
  285.  
  286. public static String encrypt(String plaintext, String key) {
  287. return vigenere(plaintext, key, true);
  288. }
  289.  
  290. public static String decrypt(String ciphertext, String key) {
  291. return vigenere(ciphertext, key, false);
  292. }
  293.  
  294. private static String genKey(String text, String key) {
  295. if (key.length() >= text.length()) return key;
  296. int index = 0;
  297. while (key.length() < text.length()) {
  298. if (index == key.length()) index = 0;
  299. key += key.charAt(index);
  300. index++;
  301. }
  302. return key;
  303. }
  304.  
  305. private static int mod(int x, int y) {
  306. int result = x % y;
  307. if (result < 0) result += y;
  308. return result;
  309. }
  310. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement