Title: Generate WEP (Wired Equivalent Privacy) keys
Question: Ever wanted to know how WEP (Wired Equivalent Privacy) encryption for wireless networks are generated with Strong keys : 64/128/152/256-bit
enjoy
Ronald
Answer:
// WEPKEY algoritm
type WEPKINDTYPE = ( WEPKT64, WEPKT128, WEPKT152, WEPKT256);
const WEP_ASCIIArray : array [0..94] of char =
(' ', '!', '"', '#', '$', '%', '&', '\', '(', ')',
'*', '+', ',', '-', '.', '/','0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', ':', ';', ' '', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[',
'\', ']', '^', '_', '''', 'a', 'b', 'c', 'd', 'e',
'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', '{', '|', '}', '~');
WEP_HEXArray : array [0..94] of string =
('20','21','22','23','24','25','26','27','28','29',
'2A','2B','2C','2D','2E','2F','30','31','32','33',
'34','35','36','37','38','39','3A','3B','3C','3D',
'3E','3F','40','41','42','43','44','45','46','47',
'48','49','4A','4B','4C','4D','4E','4F','50','51',
'52','53','54','55','56','57','58','59','5A','5B',
'5C','5D','5E','5F','60','61','62','63','64','65',
'66','67','68','69','6A','6B','6C','6D','6E','6F',
'70','71','72','73','74','75','76','77','78','79',
'7A','7B','7C','7D','7E');
function WEPKEY ( var Value : string; Kind : WEPKINDTYPE = WEPKT128 ) : string;
function LocateASCIIIndex( value : char ) : integer;
var i : integer;
begin
Result := 0;
for i := low(WEP_ASCIIArray) to high(WEP_ASCIIArray) do
begin
if Value = WEP_ASCIIArray[i] then
begin
result := i;
break;
end;
end;
end;
var i,j,t : integer;
ts : string;
begin
result := '';
ts := trim(Value);
case kind of
WEPKT64 : t := 5;
WEPKT128 : t := 13;
WEPKT152 : t := 16;
WEPKT256 : t := 29;
end;
if ts = '' then
begin
SetLength(Ts,T);
for i := 1 to t do
Ts[i] := WEP_ASCIIArray[random(high(WEP_ASCIIArray)-low(WEP_ASCIIArray))];
end;
if length(ts) begin
for i := 1 to t - length(ts) do
Ts := Ts + WEP_ASCIIArray[random(high(WEP_ASCIIArray)-low(WEP_ASCIIArray))];
end;
for i := 1 to length(Ts) do
begin
j := LocateASCIIIndex(Ts[i]);
Result := Result + WEP_HexArray[j];
end;
Value := Ts;
end;