Sie sind auf Seite 1von 11

package com.blowfish; import import import import import import import import import import java.awt.Color; java.awt.image.BufferedImage; java.awt.image.

DataBufferByte; java.awt.image.WritableRaster; java.io.File; java.io.FileReader; java.io.IOException; java.nio.file.Files; java.util.List; java.util.Scanner;

import javax.imageio.ImageIO; import au.com.bytecode.opencsv.CSVReader; public class BlowfishEncr { public static void main(String[] args) { BufferedImage image = null; Long sbox1[]=new Long[256]; Long sbox2[]=new Long[256]; Long sbox3[]=new Long[256]; Long sbox4[]=new Long[256]; Long parray[]=new Long[18]; Long sa=null; Long sb=null; Long sc = null; Long sd=null; int rightdata=0; int leftdata=0; int get=0; int tem=0; int leftdatanew=0; int rightdatanew=0; int rows=0; int cols=0; int[][] red=null; int[][] sred=null; int[][] green=null; int[][] sgreen=null; int[][] blue=null; int[][] sblue=null; int keycounter=0; int[] key_array=new int[18]; try { File imagefile = new File("C://release2/cryptography/bab oon.jpg"); image = ImageIO.read(imagefile); cols=(image.getHeight()); rows=(image.getWidth()); red=new int[image.getWidth()][image.getWidth()]; sred=new int[image.getWidth()][image.getWidth()];

green=new int[image.getWidth()][image.getWidth()]; sgreen=new int[image.getWidth()][image.getWidth()]; blue=new int[image.getWidth()][image.getWidth()]; sblue=new int[image.getWidth()][image.getWidth()]; for(int i=0;i<rows;i++){ for(int j=0;j<cols;j++){ red[i][j]=((image.getRGB(j,i) >> 16)& 0x ff); green[i][j]=((image.getRGB(j,i) >> 8)& 0 xff) ; blue[i][j]=((image.getRGB(j,i) )& 0xff) ; //System.out.println("blue:"+red[0][7]); //System.out.println("pppppp:"+red1); //System.out.println(blue[0][0]); } } int count=0; String[] row =null; CSVReader csvReader = new CSVReader(new FileReader("C:// release2/cryptography/sbox.csv")); //List content = csvReader.readAll(); //System.out.println(content.size()); while((row = csvReader.readNext()) != null) { //row = (String[]) object; //System.out.println(Long.decode(row[1])); sbox1[count]=Long.decode(row[0]); sbox2[count]=Long.decode(row[1]); sbox3[count]=Long.decode(row[2]); sbox4[count]=Long.decode(row[3]); count=count+1; } //System.out.println(sbox1.length); //System.out.println(sbox2.length); //System.out.println(sbox3.length); //System.out.println(sbox4.length); int pcount=0; String[] prow =null; CSVReader csvReaderp = new CSVReader(new FileReader("C:/ /release2/cryptography/parray.csv")); //List content = csvReader.readAll(); //System.out.println(content.size()); while((prow = csvReaderp.readNext()) != null) { //row = (String[]) object; //System.out.println(Long.decode(row[1])); while(pcount < prow.length){ parray[pcount]=Long.decode(prow[pcount]) ; pcount=pcount+1; }

} //System.out.println(parray[1]); //System.out.println(parray[1] & 0xff); //System.out.println(parray[1] >>8 & 0xff); //System.out.println(parray[1] >> 16 & 0xff); //System.out.println(parray[1] >> 32 & 0xff);

}catch(Exception e){ e.printStackTrace(); } Scanner s=new Scanner(System.in); System.out.println("enter key"); String key=s.next(); int keylength=key.length(); //System.out.println(Character.getNumericValue(key.charAt(0))); //System.out.println((int)key.charAt(1)); //System.out.println(((int)key.charAt(1))^((int)key.charAt(0))); for (int count=0;count<18;count++) { key_array[count]=0; for (int incount=0;incount < 4;incount++) { key_array[count]=(key_array[count] ) ^ ((int)key .charAt(keycounter)); //System.out.println(key_array[count]); if(incount!=3){ key_array[count]=key_array[count] <<8; } keycounter=keycounter+1; if(keycounter>keylength-1 || keycounter > 56){ keycounter=1;} } } //System.out.println(key_array[count]); for (int count=0;count<18;count++) { parray[count]^=key_array[count]; //System.out.println(parray[count]); } long initialdata=0; rightdata=(int)(initialdata >> 32) &(0xffffffff); leftdata=(int)(initialdata ) &(0xffffffff); for(int count=0;count<9;count++) { for(int round=0;round<16;round++) { int value=(int) (leftdata ^ parray[round]); int sboxdata1=value&0xff; int sboxdata2=(value >>8)&0xff;

int sboxdata3=(value >> 16)&0xff; int sboxdata4=(value >> 24)& 0xff; sa=sbox1[sboxdata1];

sb=sbox2[sboxdata2]; sc=sbox3[sboxdata3]; sd=sbox4[sboxdata4]; int temp=(int) ((sa+sb) % Math.pow(2,32)); temp^=sc; temp+=sd; get=(int) (temp% Math.pow(2,32)); //System.out.println(get); leftdatanew=get^rightdata; rightdatanew=(int) (leftdata ^ parray[round]); leftdata=leftdatanew; rightdata=rightdatanew; } tem=leftdata; leftdata=rightdata; rightdata=tem; leftdata=(int) (leftdata ^ parray[17]); rightdata=(int) (rightdata ^parray[16]); parray[(2*count)]=(long) leftdata; parray[2*count+1]=(long) rightdata; //System.out.println(parray[2*count]); //System.out.println(parray[2*count+1]); } for (int count=0;count<128;count++) { for (int j=0;j<3;j++) { for (int round=0;round<16;round++) { int value=(int) (leftdata ^ parray[round ]); int sboxdata1=value&0xff; int sboxdata2=(value >>8)&0xff; int sboxdata3=(value >> 16)&0xff; int sboxdata4=(value >> 24)& 0xff; sa=sbox1[sboxdata1];

sb=sbox2[sboxdata2]; sc=sbox3[sboxdata3]; sd=sbox4[sboxdata4]; int temp=(int) ((sa+sb) % Math.pow(2,32) ); temp^=sc; temp+=sd; get=(int) (temp% Math.pow(2,32)); leftdatanew=(get^rightdata); rightdatanew=(int) (leftdata^parray[roun d]); leftdata=leftdatanew; rightdata=rightdatanew; } tem=leftdata; leftdata=rightdata; rightdata=tem; leftdata=(int)(leftdata^parray[17]); rightdata=(int)(rightdata^parray[16]); if(j==1){ sbox1[2*count]=(long)leftdata; sbox1[2*count+1]=(long)rightdata; //System.out.println(sbox1[count]); } if(j==2){ sbox2[2*count]=(long)leftdata; sbox2[2*count+1]=(long)rightdata; } if(j==3){ sbox3[2*count]=(long)leftdata; sbox3[2*count+1]=(long)rightdata; } if(j==4){ sbox4[2*count]=(long)leftdata; sbox4[2*count+1]=(long)rightdata; //System.out.println(sbox4[count+1]); } } }

int i=0,j=0,i1=0,j1=0; int[] imgbyte=new int[8]; while (i<rows-1 || (cols-j+1)>7) { for (int l=0;l<8;l++)

{ if(j>cols-1) { j=0; i=i+1; } //System.out.println(i); imgbyte[l]=red[i][j]; //System.out.println(j); //System.out.println(red[i][j]); j=j+1; } rightdata=(imgbyte[4]<<24)|(imgbyte[5]<<16)|(imgbyte[6]< <8)|(imgbyte[7]); leftdata=(imgbyte[0]<<24)|(imgbyte[1]<<16)|(imgbyte[2]<< 8)|(imgbyte[3]); for (int round=0;round<16;round++) { int value=(int) (leftdata ^ parray[round]); int sboxdata1=value&0xff; int sboxdata2=(value >>8)&0xff; int sboxdata3=(value >> 16)&0xff; int sboxdata4=(value >> 24)& 0xff; sa=sbox1[sboxdata1];

sb=sbox2[sboxdata2]; sc=sbox3[sboxdata3]; sd=sbox4[sboxdata4];

int temp=(int) ((sa+sb) % Math.pow(2,32)); temp^=sc; temp+=sd; get=(int) (temp% Math.pow(2,32)); //System.out.println(get); leftdatanew=(get^rightdata); rightdatanew=(int) (leftdata^parray[round]); leftdata=leftdatanew; rightdata=rightdatanew; } tem=leftdata; leftdata=rightdata; rightdata=tem; leftdata=(int) (leftdata^parray[17]); rightdata=(int) (rightdata^parray[16]); //leftdata=typecast(uint32(leftdata),'uint8'); //rightdata=typecast(uint32(rightdata),'uint8');

for (int l1=0;l1<8;l1++) { if(j1>cols-1) { j1=0; i1=i1+1; } if (l1<4) { red[i1][j1]=(leftdata>>(8*(3-l1))) & 0xf f; //System.out.println("qwrqwqwfqwfd:"+red[0][0]); } else{ red[i1][j1]=rightdata>>(8*(7-l1))&0xff; } //System.out.println(red[i1][j1]); j1=j1+1; } } i=0;j=0;i1=0;j1=0; while (i<rows-1 || (cols-j+1)>7) { for (int l=0;l<8;l++) { if(j>cols-1) { j=0; i=i+1; } //System.out.println(i); imgbyte[l]=green[i][j]; //System.out.println(j); //System.out.println(green[i][j]); j=j+1; } rightdata=(imgbyte[4]<<24)|(imgbyte[5]<<16)|(imgbyte[6]< <8)|(imgbyte[7]); leftdata=(imgbyte[0]<<24)|(imgbyte[1]<<16)|(imgbyte[2]<< 8)|(imgbyte[3]); //System.out.println(rightdata); for (int round=0;round<16;round++) { int value=(int) (leftdata ^ parray[round]); int sboxdata1=value&0xff; int sboxdata2=(value >>8)&0xff; int sboxdata3=(value >> 16)&0xff; int sboxdata4=(value >> 24)& 0xff; sa=sbox1[sboxdata1];

sb=sbox2[sboxdata2]; sc=sbox3[sboxdata3]; sd=sbox4[sboxdata4];

int temp=(int) ((sa+sb) % Math.pow(2,32)); temp^=sc; temp+=sd; get=(int) (temp% Math.pow(2,32)); //System.out.println(get); leftdatanew=(get^rightdata); rightdatanew=(int) (leftdata^parray[round]); leftdata=leftdatanew; rightdata=rightdatanew; } tem=leftdata; leftdata=rightdata; rightdata=tem; leftdata=(int) (leftdata^parray[17]); rightdata=(int) (rightdata^parray[16]); //leftdata=typecast(uint32(leftdata),'uint8'); //rightdata=typecast(uint32(rightdata),'uint8'); for (int l1=0;l1<8;l1++) { if(j1>cols-1) { j1=0; i1=i1+1; } if (l1<4) { green[i1][j1]=leftdata>>(8*(3-l1)) & 0xf f;} else{ green[i1][j1]=rightdata>>(8*(7-l1))&0xff ; } //System.out.println(red[i1][j1]); j1=j1+1; } } i=0;j=0;i1=0;j1=0; while (i<rows-1 || (cols-j+1)>7) { for (int l=0;l<8;l++) { if(j>cols-1) {

j=0; i=i+1; } //System.out.println(i); imgbyte[l]=blue[i][j]; //System.out.println(j); //System.out.println(red[0][0]); j=j+1; } rightdata=(imgbyte[4]<<24)|(imgbyte[5]<<16)|(imgbyte[6]< <8)|(imgbyte[7]); leftdata=(imgbyte[0]<<24)|(imgbyte[1]<<16)|(imgbyte[2]<< 8)|(imgbyte[3]); //System.out.println(rightdata); for (int round=0;round<16;round++) { int value=(int) (leftdata ^ parray[round]); int sboxdata1=value&0xff; int sboxdata2=(value >>8)&0xff; int sboxdata3=(value >> 16)&0xff; int sboxdata4=(value >> 24)& 0xff; sa=sbox1[sboxdata1];

sb=sbox2[sboxdata2]; sc=sbox3[sboxdata3]; sd=sbox4[sboxdata4];

int temp=(int) ((sa+sb) % Math.pow(2,32)); temp^=sc; temp+=sd; get=(int) (temp% Math.pow(2,32)); //System.out.println(get); leftdatanew=(get^rightdata); rightdatanew=(int) (leftdata^parray[round]); leftdata=leftdatanew; rightdata=rightdatanew; } tem=leftdata; leftdata=rightdata; rightdata=tem; leftdata=(int) (leftdata^parray[17]); rightdata=(int) (rightdata^parray[16]); //leftdata=typecast(uint32(leftdata),'uint8'); //rightdata=typecast(uint32(rightdata),'uint8'); for (int l1=0;l1<8;l1++) { if(j1>cols-1) { j1=0;

i1=i1+1; } if (l1<4) { blue[i1][j1]=leftdata>>(8*(3-l1)) & 0xff ;} else{ blue[i1][j1]=rightdata>>(8*(7-l1))&0xff; } //System.out.println(red[i1][j1]); j1=j1+1; } }

for( i=0;i<rows;i++){ for( j=0;j<cols;j++) { //System.out.println(red[0][7]); //System.out.println(blue[i][j]); int rgb=(((red[i][j]&0xff)<<16) |((green[i][j]&0 xff)<<8) | ((blue[i][j]&0xff)) | (0xff <<24)); //System.out.println("rgb"+rgb); image.setRGB(j,i, rgb); //System.out.println((image.getRGB(0,0)>>16)&0xff); //System.out.println(image.getRGB(0,0)&0x00fffff f); //System.out.println(j+"n"+(image.getRGB(i, j) & 0xff) ); } } try { ImageIO.write(image, "png",new File("Encrypted.png")); File imagefile = new File("C://release2/cryptography/Enc rypted.png"); image=ImageIO.read(imagefile); for( i=0;i<rows;i++){ for( j=0;j<cols;j++){ //System.out.println(image.getRGB(0,0)&0 xffffff); //System.out.println((image.getRGB(0, 0) >>24)&0xff); red[i][j]=((image.getRGB(j,i) >> 16)& 0x ff); green[i][j]=((image.getRGB(j,i) >> 8)& 0 xff) ; blue[i][j]=((image.getRGB(j,i) )& 0xff) ; //System.out.println("ppp:"+red[1][1]); //System.out.println(red[0][7]);

//System.out.println(green[0][0]); //System.out.println(blue[0][1]); } }

} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

} }

Das könnte Ihnen auch gefallen