Willkommen in der Webstatt Zum Webstatt Blog und Stories
danieL danieL am 16.12.06 16:49

Hiho, sitze schon ne weile an dem Problem, dass ich nicht weiss, wie ich aus den beiden PHP Funktionen hier:
//Einen Text in Longzahlen umwandeln
//Covert a string into longinteger
function _str2long($data)
{
$n = strlen($data);
$tmp = unpack('N*', $data);
$data_long = array();
$j = 0;

foreach ($tmp as $value) $data_long[$j++] = $value;
return $data_long;
}

//Longzahlen in Text umwandeln
//Convert a longinteger into a string
function _long2str($l)
{
return pack('N', $l);
}


VB Funktionen mache, vorallem weil ich nicht weiss, wie ich die pack bzw. unpack Funktion ersetzen soll in vb. Hab schon ne weile gegoogled, aber bis jetzt noch nichts gefunden. Vielleicht könnt ihr mir ja helfen.

Gruß

Daniel

netcup.de Warum gibt es hier Werbung?
Snake am 16.12.06 18:57

wozu brauchst du das denn?

Barabbas Barabbas am 16.12.06 20:18

mau? sowas?


Dim bla As Long
Dim bla2 As String

bla2 = "324234"
bla = Val(bla2)

MsgBox bla

bla2 = bla & "Dies ist ein String"
MsgBox bla2

danieL danieL am 16.12.06 20:21

Ich will den Blowfish Verschlüsselungsalgorithmus von PHP umschreiben in VB, so als kleines privates Projekt.

Hab den Source hier gefunden im Netz.

<?php
$key = $_POST['key'];
?>

<form action="" method="post" target="">
Key: <br>
<input type="Text" name="key" value="<?php echo $key; ?>" size="" maxlength="12"><br><br>

Text: <br>
<textarea name="text" cols="50" rows="6"></textarea><br>

&nbsp;&nbsp;&nbsp;<input type="Submit" name="crypt" value="Verschlüsseln">&nbsp;&nbsp;&nbsp;
<input type="Submit" name="decrypt" value="Entschlüsseln">
</form>

<?php
include("blowfish.box.php"); //P-Box and S-Box

$text = trim($_POST['text']);
if(isset($_POST['key'])) keys($_POST['key']);

//Verschlüsselungsmodus / Encryptionmode:
//EBC: 0
//CBC: 1
define("CBC",1);

//Einen Text in Longzahlen umwandeln
//Covert a string into longinteger
function _str2long($data)
{
$n = strlen($data);
$tmp = unpack('N*', $data);
$data_long = array();
$j = 0;

foreach ($tmp as $value) $data_long[$j++] = $value;
return $data_long;
}

//Longzahlen in Text umwandeln
//Convert a longinteger into a string
function _long2str($l)
{
return pack('N', $l);
}

//Key-Algorithmen
function keys($key)
{
global $pbox,$sbox0,$sbox1,$sbox2,$sbox3;
$key_md5 = md5($key);

//Füllt den $key auf 16 Stellen auf
//Convert the $key into a 16Byte key
$key = _str2long(substr(str_pad($key, 16, $key_md5),0,16));


# XOR Pbox1 with the first 32 bits of the key, XOR P2 with the second 32-bits of the key,
for($i=0;$i<count($pbox);$i++)
{
$pbox[$i] ^= $key[$i%4];
}

$v[0] = 0x00000000;
$v[1] = 0x00000000;

//P-Box durch verschlüsselte Nullbit Blöcke ersetzen. In der nächsten Runde das Resultat erneut verschlüsseln
//Encrypt Nullbit Blocks and replace the Pbox with the Chiffre. Next round, encrypt the result
for($i=0;$i<count($pbox);$i+=2)
{
$v = block_encrypt(array($v[0],$v[1]));
$pbox[$i] = $v[0];
$pbox[$i+1] = $v[1];
}

//S-Box [0 bis 3] durch verschlüsselte Blöcke ersetzen
//Replace S-Box [0 to 3] entries with encrypted blocks
for($i=0;$i<count($sbox0);$i+=2)
{
$v = block_encrypt(array($v[0],$v[1]));
$sbox0[$i] = $v[0];
$sbox0[$i+1] = $v[1];
}

//S-Box1
for($i=0;$i<count($sbox1);$i+=2)
{
$v = block_encrypt(array($v[0],$v[1]));
$sbox1[$i] = $v[0];
$sbox1[$i+1] = $v[1];
}

//S-Box2
for($i=0;$i<count($sbox2);$i+=2)
{
$v = block_encrypt(array($v[0],$v[1]));
$sbox2[$i] = $v[0];
$sbox2[$i+1] = $v[1];
}

//S-Box3
for($i=0;$i<count($sbox3);$i+=2)
{
$v = block_encrypt(array($v[0],$v[1]));
$sbox3[$i] = $v[0];
$sbox3[$i+1] = $v[1];
}

return $key;
}




//Verschlüsselung ($text = text/string)
//Encrytion
function blowfish_crypt($text)
{
$n = strlen($text);
if($n%8 != 0) $lng = ($n+(8-($n%8)));
else $lng = 0;

$text = str_pad($text, $lng, ' ');
$text = _str2long($text);

//Initialization vector: IV
if(CBC == 1)
{
$cipher[0][0] = time();
$cipher[0][1] = (double)microtime()*1000000;
}

$a = 1;
for($i = 0; $i<count($text); $i+=2)
{
if(CBC == 1)
{
//$text mit letztem Geheimtext XOR Verknüpfen
//$text is XORed with the previous ciphertext
$text[$i] ^= $cipher[$a-1][0];
$text[$i+1] ^= $cipher[$a-1][1];
}

$cipher[] = block_encrypt(array($text[$i],$text[$i+1]));
$a++;
}

$output = "";
for($i = 0; $i<count($cipher); $i++)
{
$output .= _long2str($cipher[$i][0]);
$output .= _long2str($cipher[$i][1]);
}

return base64_encode($output);
}




//Entschlüsseln
//Decryption
function blowfish_decrypt($text)
{
$plain = array();
$cipher = _str2long(base64_decode($text));

if(CBC == 1) $i = 2; //Message start at second block
else $i = 0; //Message start at first block

for($i; $i<count($cipher); $i+=2)
{
$return = block_decrypt(array($cipher[$i],$cipher[$i+1]));

if(CBC == 1)
{
//Xor Verknüpfung von $return und Geheimtext aus von den letzten beiden Blöcken
//XORed $return with the previous ciphertext
$plain[] = array($return[0]^$cipher[$i-2],$return[1]^$cipher[$i-1]);
}
else //EBC Mode
{
$plain[] = $return;
}
}

for($i = 0; $i<count($plain); $i++)
{
$output .= _long2str($plain[$i][0]);
$output .= _long2str($plain[$i][1]);
}
return $output;
}


if(isset($_POST["crypt"]))
{
$output = blowfish_crypt($text);
echo "<br><b>Verschl&uuml;sselt</b> sieht der Text so aus:<br>
<textarea name=\"ausgabe\" cols=\"45\" rows=\"9\">".
$output."</textarea>";
}

else if(isset($_POST["decrypt"]))
{
$output = blowfish_decrypt($text);
echo "<b>Entschl&uuml;sselt</b> sieht der Text so aus:<br>".
nl2br(htmlentities(stripslashes($output)));
}


function block_encrypt($text)
{
global $pbox;
$vl = $text[0];
$vr = $text[1];

for($i=0;$i<16;$i++)
{
$vl ^= $pbox[$i];
$vr ^= sbox_round($vl);

$v_tmp = $vl;
$vl = $vr;
$vr = $v_tmp;
}

$v_tmp = $vl;
$vl = $vr;
$vr = $v_tmp;

$vr ^= $pbox[16];
$vl ^= $pbox[17];


return array($vl,$vr);
}

function block_decrypt($text)
{
global $pbox;

$vl = $text[0];
$vr = $text[1];

for($i=17;$i>1;$i--)
{
$vl ^= $pbox[$i];
$vr ^= sbox_round($vl);

$v_tmp = $vl;
$vl = $vr;
$vr = $v_tmp;
}

$v_tmp = $vl;
$vl = $vr;
$vr = $v_tmp;

$vr ^= $pbox[1];
$vl ^= $pbox[0];

return array($vl,$vr);
}


function sbox_round($integer)
{
global $sbox0,$sbox1,$sbox2,$sbox3;

//$integer in vier 8 Bit Blöcke unterteilen
//Split $integer into four 8 Bit blocks
$b0 = $integer<<24 & 0xFF;
$b1 = $integer<<16 & 0xFF;
$b2 = $integer<<8 & 0xFF;
$b3 = $integer & 0xFF;


$return = ($sbox0[$b0] + $sbox1[$b1] % pow(2,32)) ;
$return = ($return ^ $sbox2[$b2]) + $sbox3[$b3] % pow(2,32);

return $return;
}
?>


Quote
Original von Barabbas
mau? sowas?


Dim bla As Long
Dim bla2 As String

bla2 = "324234"
bla = Val(bla2)

MsgBox bla

bla2 = bla & "Dies ist ein String"
MsgBox bla2


Funzt ja so, aber bist du sicher, das es auch dann im zusammenhang so funktioniert wie gewünscht? :) Wenn du dir nicht sicher bist, probiere ich es nachher einfach mal.

Snake am 16.12.06 20:48

warum nimmste nicht ne dll die das kann?

//edit
http://www.di-mgt.com.au/crypto.html#BlowfishVB

danieL danieL am 16.12.06 23:20

Quote
Original von Snake
warum nimmste nicht ne dll die das kann?

//edit
http://www.di-mgt.com.au/crypto.html#BlowfishVB


Will es ja selbst Programmieren, die DLL hab ich auch schon gefunden :P

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt