[Java] Cäsarverschlüsselung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      [Java] Cäsarverschlüsselung

      Das erste Projekt in Java, weshalb man etwas Nachsehen beim Source
      haben darf, war ein Verschlüsselungsprogramm, welches die einfache
      Cäsarverschlüsselung umsetzen sollte.


      Das damalige römische Reich verwendete den nach Cäsar benannten
      Algorithmus, welcher jeden Buchstaben des zu verschlüsselnden Text um
      die Position des Schlüsselbuchstabens im Alphabet verschoben wird.


      Nachdem die Cäsar-Klasse recht schnell fertig war, wollten ich das Programm noch um Mutltithreading erweitern.





      Cäsar Klasse mit
      Multithreading:

      Quellcode

      1. public class caesar {
      2. protected
      3. char[] alphabet;
      4. long start_millis;
      5. String s;
      6. char key;
      7. boolean mode;
      8. String[] strings = null;
      9. codingThread[] threads;
      10. int threadanzahl;
      11. int prioritaet;
      12. ThreadGroup tg;
      13. public caesar() {
      14. super();
      15. alphabet = new char[] {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
      16. start_millis=0;
      17. }
      18. public String start(String st, char k,boolean m, int tanzahl,int prioritaet) {
      19. this.prioritaet = prioritaet;
      20. start_time();
      21. this.key=k;
      22. this.s=st;
      23. this.mode=m;
      24. this.threadanzahl=tanzahl;
      25. if ((this.threadanzahl >= this.s.length())){
      26. this.threadanzahl = 1;
      27. }
      28. strings = new String[threadanzahl+1];
      29. threads = new codingThread[threadanzahl+1];
      30. return allesaugeben();
      31. }
      32. public String encode(String s,int iThread) {
      33. String sneu = "";
      34. char[] schars;
      35. schars = s.toCharArray();
      36. int shl = indexOf(alphabet,key);
      37. if(shl!=-1) {
      38. for(int i = 0; i<=schars.length-1;i++) {
      39. if(!(threads[iThread].isInterrupted())) {
      40. int ckey = indexOf(alphabet,schars[i]);
      41. if(ckey!= -1) {
      42. if((shl+ckey) < alphabet.length) {
      43. sneu+=Character.toUpperCase(alphabet[(shl+ckey)]);
      44. } else {
      45. sneu+=Character.toUpperCase(alphabet[(shl+ckey)-alphabet.length]);
      46. }
      47. } else {
      48. sneu += schars[i];
      49. }
      50. } else {
      51. break;
      52. }
      53. }
      54. return sneu;
      55. } else {
      56. return "";
      57. }
      58. }
      59. public String decode(String s, int iThread) {
      60. String sneu = "";
      61. char[] schars;
      62. schars = s.toCharArray();
      63. int shl = indexOf(alphabet,key);
      64. if(shl!=-1) {
      65. for(int i = 0; i<=schars.length-1;i++) {
      66. int ckey = indexOf(alphabet,schars[i]);
      67. if(ckey!= -1) {
      68. if((ckey-shl)> 0) {
      69. sneu+= Character.toLowerCase(alphabet[(ckey-shl)]);
      70. } else if((ckey-shl < 0)) {
      71. sneu+=Character.toLowerCase(alphabet[alphabet.length+ckey-shl]);
      72. } else {
      73. sneu+=Character.toLowerCase(alphabet[0]);
      74. }
      75. }else {
      76. sneu += schars[i];
      77. }
      78. }
      79. return sneu;
      80. } else {
      81. return "";
      82. }
      83. }
      84. public int indexOf(char[] chr , char ch) {
      85. try {
      86. for(int i=0;i<=chr.length;i++) {
      87. if(Character.toUpperCase(ch)==chr[i]) {
      88. return i;
      89. }
      90. }
      91. return -1;
      92. } catch(ArrayIndexOutOfBoundsException e) {
      93. return -1;
      94. }
      95. }
      96. public void pause() {
      97. for(int i=1;i<= threads.length-1;i++) {
      98. threads[i].interrupt();
      99. }
      100. }
      101. public void resume() {
      102. tg.resume();
      103. }
      104. public String count_chars(String s) {
      105. double len = (double) s.length();
      106. String[] shr;
      107. shr = new String[2];
      108. if(len > 1000) {
      109. shr[0] = (Double.toString(len/1000));
      110. if(len > 1000000) {
      111. shr[0]= shr[0].substring(0,shr[0].length()-4)+"k";
      112. } else {
      113. shr[0]= shr[0].substring(0,shr[0].length()-2)+"k";
      114. }
      115. } else {
      116. shr[0]=Integer.toString((int)len);
      117. }
      118. return shr[0];
      119. }
      120. public void start_time() {
      121. start_millis = System.currentTimeMillis();
      122. }
      123. public String dif_time() {
      124. long dif = System.currentTimeMillis()-start_millis;
      125. double tmpsec =(double) dif/1000;
      126. return Double.toString(tmpsec)+"sec";
      127. }
      128. public String char_sec(String s) {
      129. return Integer.toString((int)((double)s.length()/(((double) System.currentTimeMillis()-start_millis)/1000)))+" Zeichen/sec";
      130. }
      131. class codingThread extends Thread {
      132. private
      133. String s;
      134. boolean mode;
      135. int lastIndex;
      136. public codingThread(boolean b, String s_code,int i) {
      137. this.mode=b;
      138. this.s = s_code;
      139. this.lastIndex=i;
      140. this.start();
      141. }
      142. @Override
      143. public void run() {
      144. if(mode) {
      145. strings[lastIndex]=encode(this.s,lastIndex);
      146. } else {
      147. strings[lastIndex]=decode(this.s,lastIndex);
      148. }
      149. }
      150. public void warten() {
      151. try {
      152. this.join();
      153. } catch (InterruptedException e) {
      154. e.printStackTrace();
      155. }
      156. }
      157. }
      158. public String allesaugeben(){
      159. int i = 0;
      160. String[] sub = null;
      161. String s_komplett = "";
      162. tg = new ThreadGroup("The Threads");
      163. sub = new String[threadanzahl+1];
      164. int l = (int) s.length()/threadanzahl;
      165. for(i=1;i<=(int) s.length()/l;i++ ) {
      166. try{
      167. if((i) ==(int) s.length()/l) {
      168. sub[i]=s.substring(l*(i-1), s.length());
      169. break;
      170. } else {
      171. sub[i]=s.substring(l*(i-1), (i)*l);
      172. }
      173. } catch (ArrayIndexOutOfBoundsException e) {
      174. }}
      175. for(i=1;i<=sub.length-1;i++) {
      176. threads[i] = new codingThread(mode,sub[i],i);
      177. }
      178. tg.enumerate(threads);
      179. tg.setMaxPriority(prioritaet);
      180. for(i=1;i<=strings.length-1;i++) {
      181. threads[i].warten();
      182. s_komplett+=strings[i];
      183. }
      184. return s_komplett;
      185. }
      186. }
      Alles anzeigen
      Es fehlte nun nur noch eine GUI, welche kurz darauf fertig war.
      Die Source:
      Die Jar
      http://www.xup.in/dl,18699554/ceasar.zip/


      Viel Spaß beim Chiffrieren

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 127.0.0.1 ()