Created
January 2, 2017 09:45
-
-
Save msAzhar/4a06a527ddea5fdd87d2c00af76cc71c to your computer and use it in GitHub Desktop.
GOST cipher code (Information Security-2016-17)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package gost; | |
| import java.util.ArrayList; | |
| import java.util.Arrays; | |
| import java.util.Iterator; | |
| import java.util.List; | |
| import java.io.File; | |
| import java.io.FileReader; | |
| import java.io.IOException; | |
| public class Gost { | |
| public static String strLeft=""; | |
| public static String strRight=""; | |
| public static String getstrLeft(){ | |
| return strLeft; | |
| } | |
| public static void setstrLeft(String newLeft){ | |
| Gost.strLeft = newLeft; | |
| } | |
| public static String getstrRight(){ | |
| return strRight; | |
| } | |
| public static void setstrRight(String newLeft){ | |
| Gost.strRight = newLeft; | |
| } | |
| public static String ciphertxt=""; | |
| public static String getCiphertxt(){ | |
| return ciphertxt; | |
| } | |
| public static void setCiphertxt(String sifrelimetin){ | |
| Gost.ciphertxt = sifrelimetin; | |
| } | |
| //reading a file content | |
| public static String readFile(String filename) throws IOException | |
| { | |
| String content = null; | |
| File file = new File(filename); //for ex foo.txt | |
| FileReader reader = null; | |
| try { | |
| reader = new FileReader(file); | |
| char[] chars = new char[(int) file.length()]; | |
| reader.read(chars); | |
| content = new String(chars); | |
| reader.close(); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } finally { | |
| if(reader !=null){reader.close();} | |
| } | |
| System.out.println(content); | |
| return content; | |
| } | |
| //String toBinary function ıs used for plain text (by 8-bits) | |
| public static String toBinary(String text){ | |
| byte[] bytes = text.getBytes(); | |
| StringBuilder binary = new StringBuilder(); | |
| for (byte b : bytes) | |
| { | |
| int val = b; | |
| for (int i = 0; i < 8; i++) | |
| { | |
| binary.append((val & 128) == 0 ? 0 : 1); | |
| val <<= 1; | |
| } | |
| binary.append(' '); | |
| } | |
| return binary.toString(); | |
| } | |
| //tobinary function for sBox (4-bits) | |
| public static String inttoBinary(int n){ | |
| StringBuilder binary = new StringBuilder(); | |
| int shift = 4- 1; | |
| for (; shift >= 0 ; shift--) { | |
| int bit = (n >> shift) & 1; | |
| if (bit == 1) { | |
| binary.append("1"); | |
| } else { | |
| binary.append("0"); | |
| } | |
| } | |
| return binary.toString(); | |
| } | |
| //Addıng operatıon | |
| public static String bitwiseAnd(String x, String y){ | |
| StringBuilder sonuc = new StringBuilder(); | |
| List<Integer> list1 = new ArrayList<Integer>(); | |
| List<Integer> list2 = new ArrayList<Integer>(); | |
| for(char ch1 : x.toCharArray()){ | |
| int i1 = Character.getNumericValue(ch1); | |
| list1.add(i1); | |
| } | |
| for(char ch2 : y.toCharArray()){ | |
| int i2= Character.getNumericValue(ch2); | |
| list2.add(i2); | |
| } | |
| Iterator<Integer> itr = list1.iterator(); | |
| Iterator<Integer> itr2 = list2.iterator(); | |
| while (itr.hasNext()) { | |
| while (itr2.hasNext()) { | |
| Integer element = itr.next(); | |
| Integer element2 = itr2.next(); | |
| // System.out.printf(element + "&" + element2 + " = " + (element&element2) +"%n"); | |
| sonuc.append((element&element2)); | |
| } | |
| } | |
| //System.out.println(sonuc); | |
| return sonuc.toString(); | |
| } | |
| public static String bitwiseNAnd(String x, String y){ | |
| StringBuilder sonuc = new StringBuilder(); | |
| List<Integer> list1 = new ArrayList<Integer>(); | |
| List<Integer> list2 = new ArrayList<Integer>(); | |
| for(char ch1 : x.toCharArray()){ | |
| int i1 = Character.getNumericValue(ch1); | |
| list1.add(i1); | |
| } | |
| for(char ch2 : y.toCharArray()){ | |
| int i2= Character.getNumericValue(ch2); | |
| list2.add(i2); | |
| } | |
| Iterator<Integer> itr = list1.iterator(); | |
| Iterator<Integer> itr2 = list2.iterator(); | |
| while (itr.hasNext()) { | |
| while (itr2.hasNext()) { | |
| Integer element = itr.next(); | |
| Integer element2 = itr2.next(); | |
| // System.out.printf(element + "&" + element2 + " = " + (element&element2) +"%n"); | |
| sonuc.append(((element&element2))); | |
| } | |
| } | |
| //System.out.println(sonuc); | |
| return sonuc.toString(); | |
| } | |
| public static String bitwiseXOR(String x, String y){ | |
| StringBuilder sonuc = new StringBuilder(); | |
| List<Integer> list1 = new ArrayList<Integer>(); | |
| List<Integer> list2 = new ArrayList<Integer>(); | |
| for(char ch1 : x.toCharArray()){ | |
| int i1 = Character.getNumericValue(ch1); | |
| list1.add(i1); | |
| } | |
| for(char ch2 : y.toCharArray()){ | |
| int i2= Character.getNumericValue(ch2); | |
| list2.add(i2); | |
| } | |
| Iterator<Integer> itr = list1.iterator(); | |
| Iterator<Integer> itr2 = list2.iterator(); | |
| while (itr.hasNext()) { | |
| while (itr2.hasNext()) { | |
| Integer element = itr.next(); | |
| Integer element2 = itr2.next(); | |
| // System.out.printf(element + "&" + element2 + " = " + (element&element2) +"%n"); | |
| sonuc.append((element^element2)); | |
| } | |
| } | |
| //System.out.println(sonuc); | |
| return sonuc.toString(); | |
| } | |
| public static String unionStrings(String str1, String str2,String str3, String str4){ | |
| return str1+str2+str3+str4; | |
| } | |
| //Substıtutıon functıon for encryptıng the plaın text | |
| public static String yerDegistir(String metin){ | |
| StringBuilder sonuc = new StringBuilder(); | |
| int[][] sBox = new int[][]{ | |
| { 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3}, | |
| { 14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9}, | |
| { 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 }, | |
| { 7, 14, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3 }, | |
| { 6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2 }, | |
| { 4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14 }, | |
| { 13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12 }, | |
| { 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12 } | |
| }; | |
| int start1 = 0; | |
| int end1 = 4; | |
| char buf1[] = new char[end1 - start1]; | |
| metin.getChars(start1, end1, buf1, 0); | |
| String text1 = String.valueOf(buf1); | |
| int int1 = Integer.parseInt(text1, 2); | |
| //System.out.println(int1); | |
| //System.out.println(sBox[0][int1]); | |
| sonuc.append(inttoBinary(sBox[0][int1]));// burası 0 olur, cunku girilen deger 0110, yani 6 | |
| int start2 = 4; | |
| int end2 = 8; | |
| char buf2[] = new char[end2 - start2]; | |
| metin.getChars(start2, end2, buf2, 0); | |
| String text2 = String.valueOf(buf2); | |
| int int2 = Integer.parseInt(text2, 2); | |
| //System.out.println(int2); | |
| //System.out.println(sBox[1][int2]); | |
| sonuc.append(inttoBinary(sBox[1][int2]));// burası 14 olur, cunku girilen deger 0000, yani 0 | |
| int start3 = 8; | |
| int end3 = 12; | |
| char buf3[] = new char[end3 - start3]; | |
| metin.getChars(start3, end3, buf3, 0); | |
| String text3 = String.valueOf(buf3); | |
| int int3 = Integer.parseInt(text3, 2); | |
| //System.out.println(int3); | |
| //System.out.println(sBox[2][int3]); | |
| sonuc.append(inttoBinary(sBox[2][int3]));// burası 4 olur, cunku girilen deger 0110, yani 6 | |
| int start4 = 12; | |
| int end4 = 16; | |
| char buf4[] = new char[end4 - start4]; | |
| metin.getChars(start4, end4, buf4, 0); | |
| String text4 = String.valueOf(buf4); | |
| int int4 = Integer.parseInt(text4, 2); | |
| //System.out.println(int4); | |
| //System.out.println(sBox[3][int4]); | |
| sonuc.append(inttoBinary(sBox[3][int4])); | |
| int start5 = 16; | |
| int end5 = 20; | |
| char buf5[] = new char[end5 - start5]; | |
| metin.getChars(start5, end5, buf5, 0); | |
| String text5 = String.valueOf(buf5); | |
| int int5 = Integer.parseInt(text5, 2); | |
| sonuc.append(inttoBinary(sBox[4][int5])); | |
| int start6 = 20; | |
| int end6 = 24; | |
| char buf6[] = new char[end6 - start6]; | |
| metin.getChars(start6, end6, buf6, 0); | |
| String text6 = String.valueOf(buf6); | |
| int int6 = Integer.parseInt(text6, 2); | |
| sonuc.append(inttoBinary(sBox[5][int6])); | |
| int start7 = 24; | |
| int end7 = 28; | |
| char buf7[] = new char[end7 - start7]; | |
| metin.getChars(start7, end7, buf7, 0); | |
| String text7 = String.valueOf(buf7); | |
| int int7 = Integer.parseInt(text7, 2); | |
| sonuc.append(inttoBinary(sBox[6][int7])); | |
| int start8 = 28; | |
| int end8 = 32; | |
| char buf8[] = new char[end8 - start8]; | |
| metin.getChars(start8, end8, buf8, 0); | |
| String text8 = String.valueOf(buf8); | |
| int int8 = Integer.parseInt(text8, 2); | |
| sonuc.append(inttoBinary(sBox[7][int8])); | |
| //System.out.println("Posle sBox:" + sonuc); | |
| return sonuc.toString(); | |
| } | |
| //Substıtutıon functıon for decryptıng the cıpher text | |
| public static String yerDegistir2(String metin){ | |
| StringBuilder sonuc = new StringBuilder(); | |
| int[][] sBox = new int[][]{ | |
| { 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3}, | |
| { 14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9}, | |
| { 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 }, | |
| { 7, 14, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3 }, | |
| { 6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2 }, | |
| { 4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14 }, | |
| { 13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12 }, | |
| { 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12 } | |
| }; | |
| int start1 = 0; | |
| int end1 = 4; | |
| char buf1[] = new char[end1 - start1]; | |
| metin.getChars(start1, end1, buf1, 0); | |
| String text1 = String.valueOf(buf1); | |
| int int1 = Integer.parseInt(text1, 2); | |
| //System.out.println(int1); | |
| //System.out.println(sBox[0][int1]); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int1){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start2 = 4; | |
| int end2 = 8; | |
| char buf2[] = new char[end2 - start2]; | |
| metin.getChars(start2, end2, buf2, 0); | |
| String text2 = String.valueOf(buf2); | |
| int int2 = Integer.parseInt(text2, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int2){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start3 = 8; | |
| int end3 = 12; | |
| char buf3[] = new char[end3 - start3]; | |
| metin.getChars(start3, end3, buf3, 0); | |
| String text3 = String.valueOf(buf3); | |
| int int3 = Integer.parseInt(text3, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int3){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start4 = 12; | |
| int end4 = 16; | |
| char buf4[] = new char[end4 - start4]; | |
| metin.getChars(start4, end4, buf4, 0); | |
| String text4 = String.valueOf(buf4); | |
| int int4 = Integer.parseInt(text4, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int4){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start5 = 16; | |
| int end5 = 20; | |
| char buf5[] = new char[end5 - start5]; | |
| metin.getChars(start5, end5, buf5, 0); | |
| String text5 = String.valueOf(buf5); | |
| int int5 = Integer.parseInt(text5, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int5){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start6 = 20; | |
| int end6 = 24; | |
| char buf6[] = new char[end6 - start6]; | |
| metin.getChars(start6, end6, buf6, 0); | |
| String text6 = String.valueOf(buf6); | |
| int int6 = Integer.parseInt(text6, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int6){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start7 = 24; | |
| int end7 = 28; | |
| char buf7[] = new char[end7 - start7]; | |
| metin.getChars(start7, end7, buf7, 0); | |
| String text7 = String.valueOf(buf7); | |
| int int7 = Integer.parseInt(text7, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int7){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| int start8 = 28; | |
| int end8 = 32; | |
| char buf8[] = new char[end8 - start8]; | |
| metin.getChars(start8, end8, buf8, 0); | |
| String text8 = String.valueOf(buf8); | |
| int int8 = Integer.parseInt(text8, 2); | |
| for(int i=0; i<8; i++){ | |
| if(sBox[0][i]==int8){ | |
| sonuc.append(inttoBinary(i)); | |
| } | |
| } | |
| //System.out.println("Posle sBox:" + sonuc); | |
| return sonuc.toString(); | |
| } | |
| //Key generatıon functıon for encryptıng the text | |
| public static String altAnahtaruret(String masterAnahtar, int i){ | |
| String subkey=""; | |
| int start1 = 0; | |
| int end1 = 8; | |
| char buf1[] = new char[end1 - start1]; | |
| masterAnahtar.getChars(start1, end1, buf1, 0); | |
| String text1 = String.valueOf(buf1); //String str = buf1.toString(); // [C@12a3a380 | |
| //System.out.println("CharArray to String1: " + text1); | |
| int start2 = 9; | |
| int end2 = 17; | |
| char buf2[] = new char[end2 - start2]; | |
| masterAnahtar.getChars(start2, end2, buf2, 0); | |
| String text2 = String.valueOf(buf2); | |
| //System.out.println("CharArray to String2: " + text2); | |
| int start3 = 18; | |
| int end3 = 26; | |
| char buf3[] = new char[end3 - start3]; | |
| masterAnahtar.getChars(start3, end3, buf3, 0); | |
| String text3 = String.valueOf(buf3); | |
| //System.out.println("CharArray to String3: " + text3); | |
| int start4 = 27; | |
| int end4 = 35; | |
| char buf4[] = new char[end4 - start4]; | |
| masterAnahtar.getChars(start4, end4, buf4, 0); | |
| String text4 = String.valueOf(buf4); | |
| //System.out.println("CharArray to String4: " + text4); | |
| String subkey1=""; | |
| subkey1= unionStrings(text1,text2,text3,text4); | |
| //System.out.println("Subkey1:" + subkey1); | |
| int start5 = 36; | |
| int end5 = 44; | |
| char buf5[] = new char[end5 - start5]; | |
| masterAnahtar.getChars(start5, end5, buf5, 0); | |
| String text5 = String.valueOf(buf5); | |
| //System.out.println("CharArray to String5: " + text5); | |
| int start6 = 45; | |
| int end6 = 53; | |
| char buf6[] = new char[end6 - start6]; | |
| masterAnahtar.getChars(start6, end6, buf6, 0); | |
| String text6 = String.valueOf(buf6); | |
| //System.out.println("CharArray to String6: " + text6); | |
| int start7 = 54; | |
| int end7 = 62; | |
| char buf7[] = new char[end7 - start7]; | |
| masterAnahtar.getChars(start7, end7, buf7, 0); | |
| String text7 = String.valueOf(buf7); | |
| //System.out.println("CharArray to String7: " + text7); | |
| int start8 = 63; | |
| int end8 = 71; | |
| char buf8[] = new char[end8 - start8]; | |
| masterAnahtar.getChars(start8, end8, buf8, 0); | |
| String text8 = String.valueOf(buf8); | |
| //System.out.println("CharArray to String8: " + text8); | |
| String subkey2=""; | |
| subkey2= unionStrings(text5,text6,text7,text8); | |
| //System.out.println("Subkey2:" + subkey2); | |
| int start9 = 72; | |
| int end9 = 80; | |
| char buf9[] = new char[end9 - start9]; | |
| masterAnahtar.getChars(start9, end9, buf9, 0); | |
| String text9 = String.valueOf(buf9); | |
| //System.out.println("CharArray to String9: " + text9); | |
| int start10 = 81; | |
| int end10 = 89; | |
| char buf10[] = new char[end10 - start10]; | |
| masterAnahtar.getChars(start10, end10, buf10, 0); | |
| String text10 = String.valueOf(buf10); | |
| //System.out.println("CharArray to String10: " + text10); | |
| int start11 = 90; | |
| int end11 = 98; | |
| char buf11[] = new char[end11 - start11]; | |
| masterAnahtar.getChars(start11, end11, buf11, 0); | |
| String text11 = String.valueOf(buf11); | |
| //System.out.println("CharArray to String11: " + text11); | |
| int start12 = 99; | |
| int end12 = 107; | |
| char buf12[] = new char[end12 - start12]; | |
| masterAnahtar.getChars(start12, end12, buf12, 0); | |
| String text12 = String.valueOf(buf12); | |
| //System.out.println("CharArray to String12: " + text12); | |
| String subkey3=""; | |
| subkey3= unionStrings(text9,text10,text11,text12); | |
| //System.out.println("Subkey3:" + subkey3); | |
| int start13 = 108; | |
| int end13 = 116; | |
| char buf13[] = new char[end13 - start13]; | |
| masterAnahtar.getChars(start13, end13, buf13, 0); | |
| String text13 = String.valueOf(buf13); | |
| //System.out.println("CharArray to String13: " + text13); | |
| int start14 = 117; | |
| int end14 = 125; | |
| char buf14[] = new char[end14 - start14]; | |
| masterAnahtar.getChars(start14, end14, buf14, 0); | |
| String text14 = String.valueOf(buf14); | |
| //System.out.println("CharArray to String14: " + text14); | |
| int start15 = 126; | |
| int end15 = 134; | |
| char buf15[] = new char[end15 - start15]; | |
| masterAnahtar.getChars(start15, end15, buf15, 0); | |
| String text15 = String.valueOf(buf15); | |
| //System.out.println("CharArray to String15: " + text15); | |
| int start16 = 135; | |
| int end16 = 143; | |
| char buf16[] = new char[end16 - start16]; | |
| masterAnahtar.getChars(start16, end16, buf16, 0); | |
| String text16 = String.valueOf(buf16); | |
| //System.out.println("CharArray to String16: " + text16); | |
| String subkey4=""; | |
| subkey4= unionStrings(text13,text14,text15,text16); | |
| //System.out.println("Subkey4:" + subkey4); | |
| int start17 = 144; | |
| int end17 = 152; | |
| char buf17[] = new char[end17 - start17]; | |
| masterAnahtar.getChars(start17, end17, buf17, 0); | |
| String text17 = String.valueOf(buf17); | |
| //System.out.println("CharArray to String13: " + text17); | |
| int start18 = 153; | |
| int end18 = 161; | |
| char buf18[] = new char[end18 - start18]; | |
| masterAnahtar.getChars(start18, end18, buf18, 0); | |
| String text18 = String.valueOf(buf18); | |
| //System.out.println("CharArray to String18: " + text18); | |
| int start19 = 162; | |
| int end19 = 170; | |
| char buf19[] = new char[end19 - start19]; | |
| masterAnahtar.getChars(start19, end19, buf19, 0); | |
| String text19 = String.valueOf(buf19); | |
| //System.out.println("CharArray to String19: " + text19); | |
| int start20 = 171; | |
| int end20 = 179; | |
| char buf20[] = new char[end20 - start20]; | |
| masterAnahtar.getChars(start20, end20, buf20, 0); | |
| String text20 = String.valueOf(buf20); | |
| //System.out.println("CharArray to String20: " + text20); | |
| String subkey5=""; | |
| subkey5= unionStrings(text17,text18,text19,text20); | |
| //System.out.println("Subkey5:" + subkey5); | |
| int start21 = 180; | |
| int end21 = 188; | |
| char buf21[] = new char[end21 - start21]; | |
| masterAnahtar.getChars(start21, end21, buf21, 0); | |
| String text21 = String.valueOf(buf21); | |
| //System.out.println("CharArray to String21: " + text21); | |
| int start22 = 189; | |
| int end22 = 197; | |
| char buf22[] = new char[end22 - start22]; | |
| masterAnahtar.getChars(start22, end22, buf22, 0); | |
| String text22 = String.valueOf(buf22); | |
| //System.out.println("CharArray to String22: " + text22); | |
| int start23 = 198; | |
| int end23 = 206; | |
| char buf23[] = new char[end23 - start23]; | |
| masterAnahtar.getChars(start23, end23, buf23, 0); | |
| String text23 = String.valueOf(buf23); | |
| //System.out.println("CharArray to String23: " + text23); | |
| int start24 = 207; | |
| int end24 = 215; | |
| char buf24[] = new char[end24 - start24]; | |
| masterAnahtar.getChars(start24, end24, buf24, 0); | |
| String text24 = String.valueOf(buf24); | |
| //System.out.println("CharArray to String24: " + text24); | |
| String subkey6=""; | |
| subkey6= unionStrings(text21,text22,text23,text24); | |
| //System.out.println("Subkey6:" + subkey6); | |
| int start25 = 216; | |
| int end25 = 224; | |
| char buf25[] = new char[end25 - start25]; | |
| masterAnahtar.getChars(start25, end25, buf25, 0); | |
| String text25 = String.valueOf(buf25); | |
| //System.out.println("CharArray to String25: " + text25); | |
| int start26 = 225; | |
| int end26 = 233; | |
| char buf26[] = new char[end26 - start26]; | |
| masterAnahtar.getChars(start26, end26, buf26, 0); | |
| String text26 = String.valueOf(buf26); | |
| //System.out.println("CharArray to String26: " + text26); | |
| int start27 = 234; | |
| int end27 = 242; | |
| char buf27[] = new char[end27 - start27]; | |
| masterAnahtar.getChars(start27, end27, buf27, 0); | |
| String text27 = String.valueOf(buf27); | |
| //System.out.println("CharArray to String27: " + text27); | |
| int start28 = 243; | |
| int end28 = 251; | |
| char buf28[] = new char[end28 - start28]; | |
| masterAnahtar.getChars(start28, end28, buf28, 0); | |
| String text28 = String.valueOf(buf28); | |
| //System.out.println("CharArray to String28: " + text28); | |
| String subkey7=""; | |
| subkey7= unionStrings(text25,text26,text27,text28); | |
| //System.out.println("Subkey7:" + subkey7); | |
| int start29 = 252; | |
| int end29 = 260; | |
| char buf29[] = new char[end29 - start29]; | |
| masterAnahtar.getChars(start29, end29, buf29, 0); | |
| String text29 = String.valueOf(buf29); | |
| //System.out.println("CharArray to String29: " + text29); | |
| int start30 = 261; | |
| int end30 = 269; | |
| char buf30[] = new char[end30 - start30]; | |
| masterAnahtar.getChars(start30, end30, buf30, 0); | |
| String text30 = String.valueOf(buf30); | |
| //System.out.println("CharArray to String30: " + text30); | |
| int start31 = 270; | |
| int end31 = 278; | |
| char buf31[] = new char[end31 - start31]; | |
| masterAnahtar.getChars(start31, end31, buf31, 0); | |
| String text31 = String.valueOf(buf31); | |
| //System.out.println("CharArray to String31: " + text31); | |
| int start32 = 279; | |
| int end32 = 287; | |
| char buf32[] = new char[end32 - start32]; | |
| masterAnahtar.getChars(start32, end32, buf32, 0); | |
| String text32 = String.valueOf(buf32); | |
| //System.out.println("CharArray to String32: " + text32); | |
| String subkey8=""; | |
| subkey8= unionStrings(text29,text30,text31,text32); | |
| //System.out.println("Subkey8:" + subkey8); | |
| if(i==1 || i==9 || i==17 || i==32){subkey= subkey1;} | |
| else if(i==2 || i==10 || i==18 || i==31){subkey= subkey2;} | |
| else if(i==3 || i==11 || i==19 || i==30){subkey= subkey3;} | |
| else if(i==4 || i==12 || i==20 || i==29){subkey= subkey4;} | |
| else if(i==5 || i==13 || i==21 || i==28){subkey= subkey5;} | |
| else if(i==6 || i==14 || i==22 || i==27){subkey= subkey6;} | |
| else if(i==7 || i==15 || i==23 || i==26){subkey= subkey7;} | |
| else if(i==8 || i==16 || i==24 || i==25){subkey= subkey8;} | |
| return subkey; | |
| } | |
| //Key generatıon functıon for decryptıng the text | |
| public static String altAnahtaruretDecrypt(String masterAnahtar, int i){ | |
| String subkey=""; | |
| int start1 = 0; | |
| int end1 = 8; | |
| char buf1[] = new char[end1 - start1]; | |
| masterAnahtar.getChars(start1, end1, buf1, 0); | |
| String text1 = String.valueOf(buf1); //String str = buf1.toString(); // [C@12a3a380 | |
| //System.out.println("CharArray to String1: " + text1); | |
| int start2 = 9; | |
| int end2 = 17; | |
| char buf2[] = new char[end2 - start2]; | |
| masterAnahtar.getChars(start2, end2, buf2, 0); | |
| String text2 = String.valueOf(buf2); | |
| //System.out.println("CharArray to String2: " + text2); | |
| int start3 = 18; | |
| int end3 = 26; | |
| char buf3[] = new char[end3 - start3]; | |
| masterAnahtar.getChars(start3, end3, buf3, 0); | |
| String text3 = String.valueOf(buf3); | |
| //System.out.println("CharArray to String3: " + text3); | |
| int start4 = 27; | |
| int end4 = 35; | |
| char buf4[] = new char[end4 - start4]; | |
| masterAnahtar.getChars(start4, end4, buf4, 0); | |
| String text4 = String.valueOf(buf4); | |
| //System.out.println("CharArray to String4: " + text4); | |
| String subkey1=""; | |
| subkey1= unionStrings(text1,text2,text3,text4); | |
| ///System.out.println("Subkey1:" + subkey1); | |
| int start5 = 36; | |
| int end5 = 44; | |
| char buf5[] = new char[end5 - start5]; | |
| masterAnahtar.getChars(start5, end5, buf5, 0); | |
| String text5 = String.valueOf(buf5); | |
| //System.out.println("CharArray to String5: " + text5); | |
| int start6 = 45; | |
| int end6 = 53; | |
| char buf6[] = new char[end6 - start6]; | |
| masterAnahtar.getChars(start6, end6, buf6, 0); | |
| String text6 = String.valueOf(buf6); | |
| //System.out.println("CharArray to String6: " + text6); | |
| int start7 = 54; | |
| int end7 = 62; | |
| char buf7[] = new char[end7 - start7]; | |
| masterAnahtar.getChars(start7, end7, buf7, 0); | |
| String text7 = String.valueOf(buf7); | |
| //System.out.println("CharArray to String7: " + text7); | |
| int start8 = 63; | |
| int end8 = 71; | |
| char buf8[] = new char[end8 - start8]; | |
| masterAnahtar.getChars(start8, end8, buf8, 0); | |
| String text8 = String.valueOf(buf8); | |
| //System.out.println("CharArray to String8: " + text8); | |
| String subkey2=""; | |
| subkey2= unionStrings(text5,text6,text7,text8); | |
| //System.out.println("Subkey2:" + subkey2); | |
| int start9 = 72; | |
| int end9 = 80; | |
| char buf9[] = new char[end9 - start9]; | |
| masterAnahtar.getChars(start9, end9, buf9, 0); | |
| String text9 = String.valueOf(buf9); | |
| //System.out.println("CharArray to String9: " + text9); | |
| int start10 = 81; | |
| int end10 = 89; | |
| char buf10[] = new char[end10 - start10]; | |
| masterAnahtar.getChars(start10, end10, buf10, 0); | |
| String text10 = String.valueOf(buf10); | |
| //System.out.println("CharArray to String10: " + text10); | |
| int start11 = 90; | |
| int end11 = 98; | |
| char buf11[] = new char[end11 - start11]; | |
| masterAnahtar.getChars(start11, end11, buf11, 0); | |
| String text11 = String.valueOf(buf11); | |
| //System.out.println("CharArray to String11: " + text11); | |
| int start12 = 99; | |
| int end12 = 107; | |
| char buf12[] = new char[end12 - start12]; | |
| masterAnahtar.getChars(start12, end12, buf12, 0); | |
| String text12 = String.valueOf(buf12); | |
| //System.out.println("CharArray to String12: " + text12); | |
| String subkey3=""; | |
| subkey3= unionStrings(text9,text10,text11,text12); | |
| //System.out.println("Subkey3:" + subkey3); | |
| int start13 = 108; | |
| int end13 = 116; | |
| char buf13[] = new char[end13 - start13]; | |
| masterAnahtar.getChars(start13, end13, buf13, 0); | |
| String text13 = String.valueOf(buf13); | |
| //System.out.println("CharArray to String13: " + text13); | |
| int start14 = 117; | |
| int end14 = 125; | |
| char buf14[] = new char[end14 - start14]; | |
| masterAnahtar.getChars(start14, end14, buf14, 0); | |
| String text14 = String.valueOf(buf14); | |
| //System.out.println("CharArray to String14: " + text14); | |
| int start15 = 126; | |
| int end15 = 134; | |
| char buf15[] = new char[end15 - start15]; | |
| masterAnahtar.getChars(start15, end15, buf15, 0); | |
| String text15 = String.valueOf(buf15); | |
| //System.out.println("CharArray to String15: " + text15); | |
| int start16 = 135; | |
| int end16 = 143; | |
| char buf16[] = new char[end16 - start16]; | |
| masterAnahtar.getChars(start16, end16, buf16, 0); | |
| String text16 = String.valueOf(buf16); | |
| //System.out.println("CharArray to String16: " + text16); | |
| String subkey4=""; | |
| subkey4= unionStrings(text13,text14,text15,text16); | |
| //System.out.println("Subkey4:" + subkey4); | |
| int start17 = 144; | |
| int end17 = 152; | |
| char buf17[] = new char[end17 - start17]; | |
| masterAnahtar.getChars(start17, end17, buf17, 0); | |
| String text17 = String.valueOf(buf17); | |
| //System.out.println("CharArray to String13: " + text17); | |
| int start18 = 153; | |
| int end18 = 161; | |
| char buf18[] = new char[end18 - start18]; | |
| masterAnahtar.getChars(start18, end18, buf18, 0); | |
| String text18 = String.valueOf(buf18); | |
| //System.out.println("CharArray to String18: " + text18); | |
| int start19 = 162; | |
| int end19 = 170; | |
| char buf19[] = new char[end19 - start19]; | |
| masterAnahtar.getChars(start19, end19, buf19, 0); | |
| String text19 = String.valueOf(buf19); | |
| //System.out.println("CharArray to String19: " + text19); | |
| int start20 = 171; | |
| int end20 = 179; | |
| char buf20[] = new char[end20 - start20]; | |
| masterAnahtar.getChars(start20, end20, buf20, 0); | |
| String text20 = String.valueOf(buf20); | |
| //System.out.println("CharArray to String20: " + text20); | |
| String subkey5=""; | |
| subkey5= unionStrings(text17,text18,text19,text20); | |
| //System.out.println("Subkey5:" + subkey5); | |
| int start21 = 180; | |
| int end21 = 188; | |
| char buf21[] = new char[end21 - start21]; | |
| masterAnahtar.getChars(start21, end21, buf21, 0); | |
| String text21 = String.valueOf(buf21); | |
| //System.out.println("CharArray to String21: " + text21); | |
| int start22 = 189; | |
| int end22 = 197; | |
| char buf22[] = new char[end22 - start22]; | |
| masterAnahtar.getChars(start22, end22, buf22, 0); | |
| String text22 = String.valueOf(buf22); | |
| //System.out.println("CharArray to String22: " + text22); | |
| int start23 = 198; | |
| int end23 = 206; | |
| char buf23[] = new char[end23 - start23]; | |
| masterAnahtar.getChars(start23, end23, buf23, 0); | |
| String text23 = String.valueOf(buf23); | |
| //System.out.println("CharArray to String23: " + text23); | |
| int start24 = 207; | |
| int end24 = 215; | |
| char buf24[] = new char[end24 - start24]; | |
| masterAnahtar.getChars(start24, end24, buf24, 0); | |
| String text24 = String.valueOf(buf24); | |
| //System.out.println("CharArray to String24: " + text24); | |
| String subkey6=""; | |
| subkey6= unionStrings(text21,text22,text23,text24); | |
| //System.out.println("Subkey6:" + subkey6); | |
| int start25 = 216; | |
| int end25 = 224; | |
| char buf25[] = new char[end25 - start25]; | |
| masterAnahtar.getChars(start25, end25, buf25, 0); | |
| String text25 = String.valueOf(buf25); | |
| //System.out.println("CharArray to String25: " + text25); | |
| int start26 = 225; | |
| int end26 = 233; | |
| char buf26[] = new char[end26 - start26]; | |
| masterAnahtar.getChars(start26, end26, buf26, 0); | |
| String text26 = String.valueOf(buf26); | |
| ///System.out.println("CharArray to String26: " + text26); | |
| int start27 = 234; | |
| int end27 = 242; | |
| char buf27[] = new char[end27 - start27]; | |
| masterAnahtar.getChars(start27, end27, buf27, 0); | |
| String text27 = String.valueOf(buf27); | |
| //System.out.println("CharArray to String27: " + text27); | |
| int start28 = 243; | |
| int end28 = 251; | |
| char buf28[] = new char[end28 - start28]; | |
| masterAnahtar.getChars(start28, end28, buf28, 0); | |
| String text28 = String.valueOf(buf28); | |
| //System.out.println("CharArray to String28: " + text28); | |
| String subkey7=""; | |
| subkey7= unionStrings(text25,text26,text27,text28); | |
| //System.out.println("Subkey7:" + subkey7); | |
| int start29 = 252; | |
| int end29 = 260; | |
| char buf29[] = new char[end29 - start29]; | |
| masterAnahtar.getChars(start29, end29, buf29, 0); | |
| String text29 = String.valueOf(buf29); | |
| //System.out.println("CharArray to String29: " + text29); | |
| int start30 = 261; | |
| int end30 = 269; | |
| char buf30[] = new char[end30 - start30]; | |
| masterAnahtar.getChars(start30, end30, buf30, 0); | |
| String text30 = String.valueOf(buf30); | |
| //System.out.println("CharArray to String30: " + text30); | |
| int start31 = 270; | |
| int end31 = 278; | |
| char buf31[] = new char[end31 - start31]; | |
| masterAnahtar.getChars(start31, end31, buf31, 0); | |
| String text31 = String.valueOf(buf31); | |
| //System.out.println("CharArray to String31: " + text31); | |
| int start32 = 279; | |
| int end32 = 287; | |
| char buf32[] = new char[end32 - start32]; | |
| masterAnahtar.getChars(start32, end32, buf32, 0); | |
| String text32 = String.valueOf(buf32); | |
| //System.out.println("CharArray to String32: " + text32); | |
| String subkey8=""; | |
| subkey8= unionStrings(text29,text30,text31,text32); | |
| //System.out.println("Subkey8:" + subkey8); | |
| if(i==1 || i==16 || i==24 || i==32){subkey= subkey1;} | |
| else if(i==2 || i==15 || i==23 || i==31){subkey= subkey2;} | |
| else if(i==3 || i==14 || i==22 || i==30){subkey= subkey3;} | |
| else if(i==4 || i==13 || i==21 || i==29){subkey= subkey4;} | |
| else if(i==5 || i==12 || i==20 || i==28){subkey= subkey5;} | |
| else if(i==6 || i==11 || i==19 || i==27){subkey= subkey6;} | |
| else if(i==7 || i==10 || i==18 || i==26){subkey= subkey7;} | |
| else if(i==8 || i==9 || i==17 || i==25){subkey= subkey8;} | |
| return subkey; | |
| } | |
| //Shıft operatıon functıon for encryptıng the text | |
| public static String shiftLeft(String s){ | |
| int k=11; | |
| k = k%s.length(); | |
| return s.substring(k) + s.substring(0, k); | |
| } | |
| //Shıft operatıon functıon for decryptıng the text | |
| public static String shiftRight(String s){ | |
| int k=21; | |
| k = k%s.length(); | |
| return s.substring(0, k) + s.substring(k); | |
| } | |
| public static String bintoString(String binary){ | |
| String str=""; | |
| for (int i = 0; i < binary.length()/8; i++) { | |
| int a = Integer.parseInt(binary.substring(8*i,(i+1)*8),2); | |
| str += (char)(a); | |
| } | |
| return str; | |
| } | |
| public static String sifrele(String acikmetin, String altinanahtar){ | |
| String str; | |
| str = toBinary(acikmetin); | |
| String[] parts =str.split(" "); | |
| for(int i=0; i<((parts.length)/2); i++){ | |
| setstrLeft(unionStrings(parts[i], parts[i+1], parts[i+2], parts[i+3])); | |
| //System.out.println("Left block: " + strLeft); sol metin kontrol(binary) | |
| i=i+3; | |
| } | |
| for(int i=((parts.length)/2); i<parts.length; i++){ | |
| setstrRight(unionStrings(parts[i], parts[i+1], parts[i+2], parts[i+3])); | |
| //System.out.println("Right block: " + strRight); sag metin kontrol(binary) | |
| i=i+3; | |
| } | |
| //key | |
| String masterKey=""; //bu bizim master Anahtarimiz | |
| masterKey=toBinary(altinanahtar); //"01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01100001 01100011 01100001 01110010 01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01111010 01100101 01101000 01110010"; | |
| String[] masterKeyarray =masterKey.split(" "); //bosluklardan kurtuluyoruz | |
| String anahtarim = String.valueOf(masterKey); | |
| //Anahtar elde ettık | |
| for(int i=1; i<33; i++){ | |
| String subkey; | |
| subkey=altAnahtaruret(anahtarim,i); | |
| String temp=""; | |
| String sol=""; | |
| String sag=""; | |
| sol=getstrLeft(); | |
| sag=getstrRight(); | |
| String toplamasonuc; | |
| toplamasonuc = bitwiseAnd(sol,subkey); | |
| String sBoxsonrasi; | |
| sBoxsonrasi= yerDegistir(toplamasonuc); | |
| String shiftSonuc; | |
| String turSonuc; | |
| shiftSonuc=shiftLeft(sBoxsonrasi); | |
| turSonuc=bitwiseXOR(shiftSonuc,sag); //L ile R yi XOR luyoruz | |
| sol=turSonuc; | |
| temp=sol; | |
| sol=sag; | |
| sag=temp; | |
| setstrLeft(sol); | |
| setstrRight(sag); | |
| if(i==32){ | |
| //System.out.println("Sifrelenmis: " + Gost.strLeft+Gost.strRight); swap konttrol | |
| setCiphertxt(bintoString(Gost.strLeft+Gost.strRight)); | |
| //System.out.println("SIFREMETNIMIZ: " + getCiphertxt()); | |
| } | |
| //Beklenen degerler: | |
| //1Round? | |
| //Right; 01100001011000010111001001110010 | |
| //Left: 01100110011011110110111101100010 | |
| //Subkey1: 01100001011000110110000101110010 | |
| //Toplamadan sonra: 01100000011000110110000101100010 (alnanahtar ile sol) | |
| //sBox sonrasi; 01100110011011110110111101100010 | |
| //shift sonrasi; 00001110110110101110100001110010 | |
| //XOR(suanAND)sonra:01101111101110111001101000000000 (sag ile shift sonrasi sonucu) | |
| //2Round? | |
| //Right: 01101111101110111001101000000000 (bir oncekinin sonucu) | |
| //Left; 01100001011000010111001001110010 (bir onceki sag sol olur) | |
| //Subkey2: 01111010011001010110100001110010 | |
| //Toplamadan sonra: 01100000011000010110000001110010 (alnanahtar ile sol) | |
| //sBox sonrasi; 00001110010011101101010001011101 | |
| //shift sonrasi; 01110110101000101110100001110010 | |
| //XOR(suanAND)sonra:00000000010000000110000001110010 | |
| } | |
| return getCiphertxt(); | |
| } | |
| public static String sifrecoz(String acikmetin, String altinanahtar){ | |
| String str; | |
| str = (toBinary(acikmetin)).toString(); | |
| String[] parts =str.split(" "); | |
| for(int i=0; i<((parts.length)/2); i++){ | |
| setstrLeft(unionStrings(parts[i], parts[i+1], parts[i+2], parts[i+3])); | |
| i=i+3; | |
| } | |
| for(int i=((parts.length)/2); i<parts.length; i++){ | |
| setstrRight(unionStrings(parts[i], parts[i+1], parts[i+2], parts[i+3])); | |
| i=i+3; | |
| } | |
| //key | |
| String masterKey=""; //bu bizim master Anahtarimiz | |
| masterKey=toBinary(altinanahtar); //"01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01100001 01100011 01100001 01110010 01100001 01100011 01100001 01110010 01111010 01100101 01101000 01110010 01111010 01100101 01101000 01110010"; | |
| String[] masterKeyarray =masterKey.split(" "); //bosluklardan kurtuluyoruz | |
| String anahtarim = String.valueOf(masterKey); | |
| for(int i=1; i<33; i++){ | |
| String subkey; | |
| subkey=altAnahtaruretDecrypt(anahtarim,i); | |
| String temp=""; | |
| String sol=""; | |
| String sag=""; | |
| String shiftSonuc; | |
| sol=getstrLeft(); | |
| sag=getstrRight(); | |
| shiftSonuc=shiftRight(sol+sag); | |
| String sBoxsonrasi; | |
| sBoxsonrasi= yerDegistir(shiftSonuc); | |
| setstrLeft(sBoxsonrasi); | |
| sol=getstrLeft(); | |
| String toplamaSonuc; | |
| toplamaSonuc = bitwiseNAnd(sol,subkey); | |
| String turSonuc; | |
| turSonuc=bitwiseXOR(toplamaSonuc,sag); //L ile R yi XOR luyoruz | |
| sol=turSonuc; | |
| temp=sol; | |
| sol=sag; | |
| sag=temp; | |
| setstrLeft(sol); | |
| setstrRight(sag); | |
| if(i==32){ | |
| setCiphertxt(bintoString(Gost.strLeft+Gost.strRight)); | |
| } | |
| } | |
| return getCiphertxt(); | |
| } | |
| public static void main(String[] args) throws IOException { | |
| //String s = "foobaarr"; | |
| String s; | |
| s=readFile("foo.txt"); //s is a plaintext | |
| //here ıs our key used in encrypt/decrypt operatıons. | |
| String k = "acarzehracerannebabaacarzehrzehr"; | |
| String encrypted; | |
| encrypted = sifrele(s,k); //k is our master key | |
| System.out.println("METİN ŞİFRELENDİ:" + encrypted); | |
| String decrypt; | |
| decrypt=sifrecoz(encrypted,k); | |
| System.out.println( "METİN ÇÖZÜLDÜ:" + decrypt); | |
| } | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Henüz bitmedi...