Webstatt.org - Community seit 2006 - 2012 (2024?)

[VB] str2long und long2str

Avatar user-159
16.12.2006 15: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

user-303
16.12.2006 17:57

wozu brauchst du das denn?

Avatar user-124
16.12.2006 19: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

Avatar user-159
16.12.2006 19: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"zwinkern; //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, ' 'zwinkern;
$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;
}
?>


Original von user-124
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? lächeln Wenn du dir nicht sicher bist, probiere ich es nachher einfach mal.

user-303
16.12.2006 19:48

warum nimmste nicht ne dll die das kann?

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

Avatar user-159
16.12.2006 22:20

Original von user-303
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 frech