Willkommen in der Webstatt
User-1 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ß

xyz-48iel

netcup.de Warum gibt es hier Werbung?
User-2 am 16.12.06 18:57

wozu brauchst du das denn?

User-3 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

User-1 am 16.12.06 20:21

Ich will den Blowxyz-70 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("blowxyz-70.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 blowxyz-70_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 blowxyz-70_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 = blowxyz-70_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 = blowxyz-70_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 xyz-14
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.

User-2 am 16.12.06 20:48

warum nimmste nicht ne dll die das kann?

//edit
http://www.di-mgt.com.au/crypto.html#Blowxyz-70VB

User-1 am 16.12.06 23:20

Quote
Original von xyz-193
warum nimmste nicht ne dll die das kann?

//edit
http://www.di-mgt.com.au/crypto.html#Blowxyz-70VB


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