Ein Teil des ganzen Bazens

RC4

RC4 ist eine Stromchiffre. Ein kleines Beipiel soll die Funktionsweise erklären:

RC4 Beispiel in JavaScript

 




RC4 encode RC4 decode

Java Script

var rc4_encode = function(encode){
  var s = {}
  var id;
  var targetId;
  var lang;
  encode?id='message':id='cipher';
  encode?targetId='cipher':targetId='message';
  encode?lang='verschlüsselt':lang='entschlüsselt';

  var m = document.getElementById(id).value;
  var origM = m;
 
  var key = stringToBoolArray(document.getElementById('key').value);
  var keyLength = document.getElementById('key').value.length;
 
  var mLength = m.length;
  var mArray = stringToByteArray(m);

 
  var t;
  var x = 0;
  var x2 = 0
  var y = 0;
  var z = "";
  var j = 0;
 
  for(var i=0; i<=255; i++){
    s[i] = i;
  }
  for(var i=0; i<=255; i++){
    j = parseInt((j + s[i] + key[i % keyLength]) % 256);
    t = s[j];
    s[i] = parseInt(s[j]);
    s[j] = parseInt(t);
  }
  for (x=0; x<mLength; x++) {
    x2 = x % 256;
    y= ( s[x2] + y) % 256;
    t= s[x2];
    s[x2] = s[y];
    s[y] = t;
 
    z += String.fromCharCode((mArray[x] ^ s[(s[x2] + s[y]) % 256]));
   }
  document.getElementById(targetId).value = z;

  logger.innerHTML += '<br>'+origM+' is '+lang+': '+z;
   
 
}

var stringToBoolArray = function(k){
  var ret = {};
  for(var i=0; i < k.length; i++){
    ret[i] = parseInt(k.charCodeAt(i));
  }
  return ret;
}
var stringToByteArray = function(k){
  var ret = {};
  for(var i=0; i < k.length; i++){
    ret[i] = parseInt(k.charCodeAt(i));
  }  
  return ret;
}