Just nu i M3-nätverket
Gå till innehåll

Kryptering


Danne8

Rekommendera Poster

Har fått ett problem som jag inte klarar av, har gjort ett mycket simpelt krypteringsprogram och dekrypteringsprogram,

 

där bosktaven i en text förskjuts ett antalsteg i jämförelse mot ett annat tecken i nyckeln dvs, adderar bara en bokstavs ascii värde till den andra bokstaven, sen när jag ska kryptera upp deta så subraherar jag bort detta ascii värde, men då stöter jag på ett problem alla å ä ö stora som små och mellanslag, punkt och radbrytning (kanske andra soeciell tecken oxå) dekrypteras upp med ett frågetecken. dvs om jag ska dekryptera upp en text så som tack för hjälpen. - så får jag istället - tack?f?r?hj?pen?

 

Förstår inte riktigt där här med ascii värdena, tycker att det borde fungera men förstår inte problmet? nön som förstår och kanske anar en lösning på problemet?

 

Länk till kommentar
Dela på andra webbplatser

-Patrik Johansson-

Hej.

Förmodligen använder du dig av variabler(värden) av typen byte. Bytevärden kan vara mellan -128 upp till 127. Teckenvärdena för tex 'å' ligger över dessa värden. Så använder du dig av integer i stället så borde det gå bra.

 

Här här ett litet exempel där texten "Hej på dig" först ökas tre steg för att sedan skrivas ut på skärmen.

Sedan minskas den tre steg för att sedan skirvas ut på skärmen.

public class Krypt {

 public static void main(String[] args){
   String s = "Hej på dig";
   String ks = "";
   for (int i = 0; i < s.length(); i++) {
     char c = s.charAt(i); //Hämtar tecken på plats i.
     int v = (int)c; //Omvandlar teckenvärde till int.
     v = v+3;  //Ökar teckenvärdet med tre.
     char o = (char)v; //Omvandlar till char(tecken).
     ks = ks + o; //Lägger till strängen ks.
   }
   System.out.println(ks);
   s = "";
   for (int i = 0; i < ks.length(); i++) {
     char c = ks.charAt(i);
     int v = (int)c;
     v = v-3;
     char o = (char)v;
     s = s + o;
   }
   System.out.println(s); 
 }
}

 

/Neox -(Patrik J)

"Gravitation can not be held responsible for people falling in love"
- citat av Albert Einstein

 

Länk till kommentar
Dela på andra webbplatser

Har kommit en bit på väg nu med problemet men tecknena å, ä, ö (stora som små) ställer till det, övriga tecken, mellanslag och så fungerar bra,

 

Det där med byte såg ut som en enkel lösning men ser att jag bara använder mig av int; kan inte klippa in koden härifrån.

 

Någon förklaring lösning till varför ASCII - tecknena inte vill ha med mina å.ä.ö att göra? Kan nämna att jag mellan processerna sparar texten i olika filer, läser in texten från en fil krypterar den med en nyckel och sparar den i en annan, sedan läser jag in den i gen och dekrypterar den med samma nyckel och sparar i en annan fil, om filhanteringen skulle ha något med saken att göra.

 

Länk till kommentar
Dela på andra webbplatser

-Patrik Johansson-

Vad för typ av strömmar använder du vid inläsning resp skrivning till/från fil?

Det kan inte vara så att du använder dig utav någon ström som arbetar med bytes?

 

/Neox -(Patrik J)

"Gravitation can not be held responsible for people falling in love"
- citat av Albert Einstein

 

Länk till kommentar
Dela på andra webbplatser

klipp ur koden

 

/* KeyHandling - hanterar krypteringsnyckeln för

senare kryptering respektive dekryptering */

class KeyHandling {

private String cryptKey;

private int keypos, keylength;

 

//KeyHandling' konstruktor

public KeyHandling(String key) {

cryptKey = key;

keypos = 0;

keylength = cryptKey.length();

}

 

public char getNextChar() {

if (keypos == keylength)

keypos = 0;

return (cryptKey.charAt(keypos++));

}//getNextChar

}//KeyHandling

 

/* Crypt - skapar och hanterar kryptering och dekrypterings objekt*/

 

class Crypt {

private static BufferedReader indata =

new BufferedReader(new InputStreamReader(System.in));

 

/* Klassvariabler - sätts av konstruktorn och hanterar namnen på filerna i filhanteringen och nyckeln*/

 

String o, s, k;

 

//Crypt' (default) konstruktor

public Crypt() {

}

 

//Crypt' (speciella) Konstruktor

public Crypt(String a1, String a2, String a3) {

o=a1;

s=a2;

k=a3;

}

 

//sköter krypteringen av texten

public String cryptIt() throws IOException{

 

KeyHandling key = new KeyHandling(k);

int i = 0;

 

//Används för filhantering

File inputFile = new File(o);

File outputFile = new File(s);

 

 

//lite felhantering

if((!inputFile.exists()) || (!inputFile.canRead())) {

System.out.println(o+" denna fil kan ej hittas!!");

}//if

 

FileReader in = new FileReader(inputFile);

FileWriter out = new FileWriter(outputFile);

 

//Lagring i arrayer

int encrypted[] = new int[10000];

 

//Själva kryteringen

int c;

 

while ((c = in.read()) != -1){

System.out.print((char)c);

encrypted = (c+(int) key.getNextChar()) ;

 

out.write(encrypted);

i++;

}//while

 

//Stänger filströmmarna

in.close();

out.close();

 

return "kommer sen";

 

}//cryptIt

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...