Avatar billede cgroup Nybegynder
28. september 2007 - 15:45 Der er 15 kommentarer

Oversættelse af VB6 til PHP

Hejsa

Jeg prøver at oversætte denne VB6 function til PHP
Private Function Decode(ByVal Encoded As String) As String
    Dim I As Integer
    Dim strResult As String
    Dim intCounter As Integer
    Dim strKey As String
    strKey = "5371682543762534256743"
    intCounter = 1
    For I = 1 To Len(Encoded) Step 3
        strResult = strResult + Chr(CInt(Mid(Encoded, I, 3)) - CInt(Mid(strKey, intCounter, 3)))
        intCounter = intCounter + 1
        If intCounter = 20 Then intCounter = 1
    Next I
    Decode = strResult
End Function

Jeg er nået frem til følgende:

public function decodePirep($str)
    {
        $key = "5371682543762534256743";
        $counter = 0;
        for($i=0;$i<strlen($str)-1;$i+=3){
            $val1 = (int)substr($str,$i,3);
            $val2 = (int)substr($key, $counter, 3);
            $val_res = $val1 - $val2;
            $res =  $res.chr($val_res);
           
            $counter++;
            if($counter == 20){
                $counter = 0;
            }
        }
      return $res;
    }

Men den virker kun delvist, mange af de udregninger jeg laver bliver negative, og dermed en helt mærkelig ascii tegn.

Nogen som kan hjælpe med den ?
Avatar billede morhan Novice
28. september 2007 - 15:57 #1
$counter skal kun tælle til 19, da du starter ved 0

$i<strlen($str) eller $i<=strlen($str)-1
Avatar billede a1a1 Novice
28. september 2007 - 16:28 #2
variablen: i starter vel ved hvad man angiver?

cgroup -> du har vel ikke prøvet at "kryptere" en kode med det?

HVIS du er bange for at blive "hacket" så brug MD5 eller RC4 (gratis), de er svære at knække, den du har er "for simpel".... ;o)
Avatar billede a1a1 Novice
28. september 2007 - 16:32 #3
rc4: http://pear.php.net/package/Crypt_RC4/docs/1.0.2/Crypt/Crypt_RC4.html
md5: http://dk.php.net/md5 (envejs kryptering dvs. du kan ikke "få fat" i det originale)
Avatar billede olebole Juniormester
28. september 2007 - 19:38 #4
<ole>

"variablen: i starter vel ved hvad man angiver?" >> Præcis ... derfor er det vel også meget fornuftigt, hvad morhan er inde på. I VB programmet starter counter på 1 og slutter på 20 ... i PHP programmet starter counter på 0  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
28. september 2007 - 19:39 #5
if($counter == 19){
                $counter = 0;
            }
Avatar billede olebole Juniormester
28. september 2007 - 19:44 #6
- og hashing'en bliver vanskeligere at knække, hvis man bruger en kombination. Sammen med md5 er denne her ganske 'irriterende'  :)
Avatar billede a1a1 Novice
28. september 2007 - 20:10 #7
counter tjaaa...
$i=0;$i<strlen($str)-1;$i+=3
og
For I = 1 To Len(Encoded) Step 3

giver det samme antal "tal"

strResult = strResult + Chr(CInt(Mid(Encoded, I, 3)) - CInt(Mid(strKey, intCounter, 3)))
er (vist) ikke det samme som
$val1 = (int)substr($str,$i,3);

men jeg tror stadig det er en forholdsvis simpel krypterings algoritme... ;o)
(md5 og rc4 tager "lang" tid at "knække", md5 "kan" du ikke knække, men kun gætte på hvad de "originale" tegn var, hvis det kun er et bogstav, så er det jo nemt, men flere tager tid... "asf" vil altid blive til 7b064dad507c266a161ffc73c53dcdc5, men så er det jo en form for "brute force"))

http://testarea.dk/test.aspx
(den nederste virker, den anden bruger MS md5?)
check
http://www.iwebtool.com/md5?string=asf
Avatar billede a1a1 Novice
28. september 2007 - 20:15 #8
den sidste er btw i javascript så den kan nemt "stjæles" (det er min side, så det er fino, og jeg har jo heller ikke opfundet md5)

rc4 er mere "sikker" da den kræver et "password", det kan (vel) også "brute forces", men der er så mange flere muligheder ;o)
(på http://testarea.dk/aspcrypt.aspx kan du downloade et asp komponent der "kan" det)
Avatar billede a1a1 Novice
28. september 2007 - 20:19 #9
md5 igen...
http://www.dotcomunderground.com/web-tools/md5-encryption/

security is relative, anything can be broken/cracked, it's just a matter of time (and computer power)
Avatar billede morhan Novice
28. september 2007 - 20:45 #10
$i=0;$i<strlen($str)-1;$i+=3
og
For I = 1 To Len(Encoded) Step 3

vil måske nok i dette tilfælde give samme resultat, da længden af strengen er et multiplum af 3, så den vil nå at få den sidste blok med.

Hvis steppet nu havde været 1, ville de to have givet noget forskelligt
Avatar billede a1a1 Novice
28. september 2007 - 21:08 #11
morhan -> du har nok ret ;o) (det er fredag), men i bliver vel forøget med 3 for hvert "loop"
for i = 1 to 10 step 3
er vel da det samme som
for(i=0;i<=10;i+3)
(så længe i er mindre end eller lig 10, så fortsæt?)
i=0, i=3, i=6, i=9
Avatar billede a1a1 Novice
28. september 2007 - 21:08 #12
for(i=0;i<=10;i+3)
skal være
for(i=1;i<=10;i+3)
;o)
Avatar billede morhan Novice
28. september 2007 - 21:30 #13
hvis vi tager den med f.eks. 12:

for i=1 to 12 step 3
i=1, i=4, i=7, i=10

for(i=0; i<=12; i+=3)
i=0, i=3, i=6, i=9, i=12

Så løber den én gang for meget. Benyttes kun mindre end:

for(i=0; i<12; i+=3)
i=0, i=3, i=6, i=9

så er den OK
Avatar billede a1a1 Novice
28. september 2007 - 22:39 #14
;o)
i vb kan man
i=1
while i < 12 then

i=i+3
next

så er de ens ;o)
Avatar billede morhan Novice
28. september 2007 - 22:48 #15
hmmm, lad os gå tilbage til 10

for(i=0; i<10; i+=3)
  i=0 i=3 i=6 i=9

løber 4 gange

while i < 10 then
i=1 ok
i=4 ok
i=7 ok
i=10 nej

løber 3 gange

Nu får det altså ikke til at gå op på den måde, når i starter forskelligt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester