Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
kennt von euch jemand einen Verschlüsselungsalgoritmus (ausser ROT-13 und Konsorten) bei dem die Anzahl der Zeichen gleich bleibt - respektive Leerzeichen und Satzzeichen nicht mit verschlüsselt werden?
public String encode(String toEncode) {
char array[] = toEncode.toCharArray();
for (int i = 0; i < array.length; i++)
if (Character.isLetter(array[i]))
array[i] = (char)(((int)array[i])++);
return new String(array);
}
public String decode(String toDecode) {
char array[] = toDecode.toCharArray();
for (int i = 0; i < array.length; i++)
if (Character.isLetter(array[i]))
array[i] = (char)(((int)array[i])--);
return new String(array);
}
- Code ungetestet -
Das is wirklich extrem simpel, aber es reicht, um die meisten User zu verwirren^^
Nachtrag: Du kannst ja auf die oben gezeigt Art und Weise einfach auf einen Buchstaben testen und falls die Bedingung true ergibt, mit jedem beliebigen Verschlüsselungsalgorithmus verschlüsseln.
dein code ist nicht wirklich ganz korrekt. da sich buchstaben und nicht buchstaben den zahlenraum teilen ist es möglich, dass das array++ einen buchstaben zu einem nichtbuchstaben verwandelt -> decode liefert falsches ergebnis
decode sollte also Character.isLetter(array-1) prüfen
darf ich mal fragen, warum du leer- und sonderzeichen erhalten willst!? das widerspricht ja irgendwie dem grundprinzip der verschlüsselung... bzw. dann kann man es auch gleich sein lassen...
mhh Leerzeichen könnte man doch auch erhalten lassen^^..das kommt doch auch bei vielen Verschlüsselungen vor..
zur Verschlüsselung...mhh du könntest ja einen string erstmal machen, der alle möglichen buchstaben und zahlen erhaelt(und ggf auch sodnerzeichen )
diesen String dann mischen(wie hier
Code:
public static void main(String[] args) {
String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890ÖöÜüÄäß\n\t ";
char[] carray = s.toCharArray();
int num = 0;
Random r = new Random();
int max = s.length();
int cur = 0;
HashSet<Character> hs = new HashSet<Character>();
while(num < max){
if(hs.add(carray[cur = r.nextInt(max-1)])){
num++;
System.out.print(carray[cur]);
}
}
}
(was unpräzise aber was solls xD..die ausgegeben zeichenkette kopeirst du eifnach xD)
und schon haste deinen private key xD....noe also diese zufallsstring könntest du dann zur verschlüsselung benutzen,
indem du z.b. alle zeichen deines klartextes in diesem zufallsstring dann eine stelle vorwärts verschiebst..
(wie hierbsp)
Code:
public static String bdecode(String s){
StringBuffer sb = new StringBuffer(s);
for(int i = 0; i < sb.length(); i++){
try{
if((BALPHABET.indexOf(Character.toString(sb.charAt(i)))) == -1){
throw new IndexOutOfBoundsException();
}
sb.setCharAt(i, BALPHABET.charAt(BALPHABET.indexOf(Character.toString(sb.charAt(i))) + 1));
}
catch(IndexOutOfBoundsException ioobex){
sb.setCharAt(i, sb.charAt(i));
}
}
return sb.toString();
also das gegenteil von dem, was ich vorhin geschrieben hab??? is gebongt:
Code:
public static String bencode(String s){
StringBuffer sb = new StringBuffer(s);
for(int i = 0; i < sb.length(); i++){
try{
sb.setCharAt(i, BALPHABET.charAt(BALPHABET.indexOf(Character.toString(sb.charAt(i))) - 1));
}
catch(IndexOutOfBoundsException ioobex){
sb.setCharAt(i, sb.charAt(i));
}
}
return sb.toString();
}
ich kann zwischen dekodieren udn enkodieren nicht utnerscheiden...für mich ist:
klartext in schlüssel = dekodieren
schlüssel in klartext = enkodieren^^
hab ich oben im ersten post doch erklärt^^..
BALPHABET ist der zufällsstring..bsp:
Code:
public static void main(String[] args) {
String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890ÖöÜüÄäß";
char[] carray = s.toCharArray();
int num = 0;
Random r = new Random();
int max = s.length();
int cur = 0;
HashSet<Character> hs = new HashSet<Character>();
while(num < max){
if(hs.add(carray[cur = r.nextInt(max-1)])){
num++;
System.out.print(carray[cur]);
}
}
}
den string s darin hab ich hier dann erstmal gemischt (ich glaub ich haette es sogar mit Arrays.shuffle() einfacher machen können^^..aber was solls)
dann komtm zum beispiel das hier raus:
RC4 ist eine ganz normale Stromchiffre, welche bitweise arbeitet... da werden leer- und andere zeichen genau so wenig berücksichtigt, wie bei jedem anderen verschlüsselungsverfahren.