[alg] Slechtste programmeervoorbeelden deel 4 Vorige deelOverzicht

Pagina: vorige 1 ... 99 100 101 102 laatste

Acties:
Webmaster
Reacties: 920
Reg. datum: 11-02-2008

quote:
Davio schreef op dinsdag 21 mei 2013 @ 11:30:
Hihi, .NET gebruikt intern UTF-8 toch?

Dan zou het mijns inziens zinvoller zijn om een Encoding.UTF8.GetBytes te doen.
Naast dat je BitConverter.ToString(data) kunt doen natuurlijk.
Of eventueel de Base64-representatie als je het toch als string op wilt slaan.
Ik kan inderdaad geen reden bedenken waarom je ASCII zou verkiezen over UTF8, maar daar doelde ik nog nog geeneens op. Bitconverter en Base64 geven niet de gewenste (huidige manier van opslaan in db) format terug, en het moet aansluiten op de oude situatie.

Anyhow, er gaat zoveel mis in deze paar regels code. Ongeacht hoe je het zou willen encoden. StringBuilder versus String, Disposen, ToLower() op elk resultaat in de for-loop.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <summary>
/// Convert current instance to a MD5 hash
/// </summary>
/// <param name="value">Current instance</param>
/// <returns>MD5 hash</returns>
public static string ToMD5(this string value)
{
    StringBuilder hexadecimal = new StringBuilder();

    using (MD5 md5Hash = MD5.Create())
    {
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(value));

        for (int i = 0i < data.Lengthi++)
            hexadecimal.Append(data[i].ToString("x2"));
    }

    return hexadecimal.ToString().ToLower();
}

Lijkt mij al een stuk mooier. Nog meer suggesties?

Mijn systeem - HAF932 Review - Kaze Master Pro 5.25 Review

Because he doesn't row...
Reacties: 8.837
Reg. datum: 20-09-2001

quote:
Tarabass schreef op dinsdag 21 mei 2013 @ 12:07:
Lijkt mij al een stuk mooier. Nog meer suggesties?
Weet niet waar het voor is, maar md5 is niet secure als het voor signen is oid. En aangezien C# .NET gewoon ingebouwde SHA varianten heeft.

(en is die 'using' nou echt nodig? Dat je het een regel eerder opruimt?)

Zoijar wijzigde deze reactie 21-05-2013 12:34 (22%)

Доверяй, но проверяй
Reacties: 3.234
Reg. datum: 25-11-2003

quote:
Zoijar schreef op dinsdag 21 mei 2013 @ 12:32:
[...]

Weet niet waar het voor is, maar md5 is niet secure als het voor signen is oid.
MD5 kan je nog uitstekend gebruiken voor vele andere zaken.
Ik gebruik het in een app om dubbele bestanden te vinden, zal vanavond eens kijken hoe ik mijn md5 genereer.

♥ Under Construction ♦ © 1985 - 2013 and counting. ♣ Game Import Grafiekjes ♠ Born to be Root ★ Please, don't feed me meat

Because he doesn't row...
Reacties: 8.837
Reg. datum: 20-09-2001

quote:
IStealYourGun schreef op dinsdag 21 mei 2013 @ 12:35:
MD5 kan je nog uitstekend gebruiken voor vele andere zaken.
Vandaar ook mijn specifieke bewoording in die zin ;)
Reacties: 1.604
Reg. datum: 18-11-2007

Ik zou de methode ook niet "ToMD5" noemen. MD5 genereert een byte hash van een input in bytes,

ToMD5String zou ik dan toepasselijker vinden.

Verder kun je het best zonder een StringBuilder doen, dat is volgens mij één van de langzaamste implementaties.
Zie ook: http://stackoverflow.com/...e-versa/14333437#14333437
Reacties: 210
Reg. datum: 14-06-2006

Ik werd toch even nieuwsgierig naar de performance van verschillende manieren om een string om te zetten naar MD5. Ik heb drie implementaties genomen, en ToMD5_3 is het snelste. Bij 1.000.000 iteraties, op een i7-2600k:

ToMD5_1: 7075ms
ToMD5_2: 6300ms
ToMD5_3: 5752ms

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;

namespace ConsoleApplication1
{
    static class StringExtensions
    {
        public static string ToMD5_1(this string value)
        {
            StringBuilder hexadecimal = new StringBuilder();

            using (MD5 md5Hash = MD5.Create())
            {
                byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(value));

                for (int i = 0i < data.Lengthi++)
                    hexadecimal.Append(data[i].ToString("x2"));
            }

            return hexadecimal.ToString().ToLower();
        }

        public static string ToMD5_2(this string value)
        {
            byte[] data;

            using (MD5 md5 = MD5.Create())
            {
                data = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
            }

            return BitConverter.ToString(data).ToLower().Replace("-"string.Empty);
        }

        public static string ToMD5_3(this string value)
        {
            byte[] data;

            using (MD5 md5 = MD5.Create())
            {
                data = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
            }

            return data.ToHex().ToLower();
        }
    }

    static class ByteExtensions
    {
        private const string hexChars = "0123456789ABCDEF";

        public static string ToHex(this byte[] bytes)
        {
            int length = bytes.Length * 2;
            char[] hex = new char[length];
            int byteIndex = 0;

            for (int charIndex = 0charIndex < lengthcharIndex += 2)
            {
                byte byteValue = bytes[byteIndex++];
                hex[charIndex] = hexChars[byteValue / 16];
                hex[charIndex + 1] = hexChars[byteValue % 16];
            }

            return new string(hex);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int iterations = 1000000;
            Stopwatch sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_1();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());

            sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_2();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());

            sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_3();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());
            Console.ReadLine();
        }
    }
}

Reacties: 15.707
Reg. datum: 04-11-2000

quote:
Zoijar schreef op dinsdag 21 mei 2013 @ 12:32:
[...]

(en is die 'using' nou echt nodig? Dat je het een regel eerder opruimt?)
Strict genomen niet (je krijgt er geen foutmelding van), maar hij implementeert IDisposable via HashAlgorithm.

Spank your inner muppet!

Webmaster
Reacties: 920
Reg. datum: 11-02-2008

Hmm, interessant! De using is imo een stukje good practice. Gewoonte dus.

Dat de byte[] naar char[] zo snel is verbaast me eigenlijk helemaal niet. Echter een benadering die ik niet snel gekozen zou hebben. Maar dit is nu het leuke van programmeren!

Het verbaast me overigens dat die stringbuilder en bitconverter zo 'traag' zijn. Nooit geweten :)

[edit]
Het is dus niet de bitconvert die traag is, maar het replacen. Zonder ".ToLower().Replace("-", string.Empty)" is de bitconverter toch een duidelijke winnaar (scheelt 2/3 seconden).

Tarabass wijzigde deze reactie 21-05-2013 13:24 (21%)

Mijn systeem - HAF932 Review - Kaze Master Pro 5.25 Review

Because he doesn't row...
Reacties: 8.837
Reg. datum: 20-09-2001

Misschien moet je een capacity meegeven aan je stringbuilder ctor, dan hoeft hij zeker geen reallocation te doen.

* Zoijar is C# noob en redeneert alles vanuit C++/STL :P

i.e.:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static string ToMD5_1(this string value)
        {

            MD5 md5Hash = MD5.Create();
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(value));

            StringBuilder hexadecimal = new StringBuilder(data.Length * 2);

            for (int i = 0; i < data.Length; i++)
                hexadecimal.Append(data[i].ToString("x2"));
            }

            return hexadecimal.ToString().ToLower();
        }

Time dat eens?
quote:
Cyphax schreef op dinsdag 21 mei 2013 @ 13:02:
Strict genomen niet (je krijgt er geen foutmelding van), maar hij implementeert IDisposable via HashAlgorithm.
Oh, ik denk dat ik me dan vergis in hoe C# werkt. Ik nam aan dat als hij uit scope ging sowieso die dispose wordt aangeroepen. Wie heeft er ook GC nodig als je RAII en smart pointers hebt :+

Zoijar wijzigde deze reactie 21-05-2013 13:41 (103%)

Reacties: 1.604
Reg. datum: 18-11-2007

quote:
Tarabass schreef op dinsdag 21 mei 2013 @ 13:15:
Hmm, interessant! De using is imo een stukje good practice. Gewoonte dus.

Dat de byte[] naar char[] zo snel is verbaast me eigenlijk helemaal niet. Echter een benadering die ik niet snel gekozen zou hebben. Maar dit is nu het leuke van programmeren!

Het verbaast me overigens dat die stringbuilder en bitconverter zo 'traag' zijn. Nooit geweten :)

[edit]
Het is dus niet de bitconvert die traag is, maar het replacen. Zonder ".ToLower().Replace("-", string.Empty)" is de bitconverter toch een duidelijke winnaar (scheelt 2/3 seconden).
Tja, het vervelende van de zaak is dat het daarmee wel leesbaarder wordt en er is iets voor te zeggen om die implementaties daarom te kiezen, hangt er ook vanaf hoe vaak zo'n methode wordt uitgevoerd en op welk niveau het zit.

In zo'n StringExtensions-class is het van de categorie: Een keer programmeren en je hoeft er voor de rest niet meer naar te kijken. Dan is de meest snelle, minder leesbare, oplossing prima.
Webmaster
Reacties: 920
Reg. datum: 11-02-2008

Capacity op de stringbuilder maakt niets uit. Heb één met en één zonder gedeclareerd en ze wisselen elkaar af (op snelheid).

Ik denk dat ik voor de bitconverter zou kiezen. Mede voor de leesbaarheid. Qua performance ligt hij dicht bij de 'chararray' methode, maar qua leesbaarheid is hij zelfs beter dan de stringbuilder :)

Mijn systeem - HAF932 Review - Kaze Master Pro 5.25 Review

NoxiousPluK
Reacties: 4.885
Reg. datum: 29-07-2002


code:
1
$tax = number_format(($aInvoice['invoice_define'] == 'C' ? -1 * $aRule['price']['price'] - $aRule['price']['discount'] : ($aRule['price']['price'] - $aRule['price']['discount'])), 2, ',', '');

:X

Oh en de ouput was ook nog eens verkeerd :+

EVE Online: CEO van Jovian Legacy, alliance executor van Jovian Empire. Join 'public redbox' ingame. Blink spelen? http://cogdev.net/blink/ gebruik referalcode 'jovianblink' voor gratis startcredits. IRC

Fulltime #whatpulsert
Reacties: 2.264
Reg. datum: 21-12-2004

Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.

NoxiousPluK
Reacties: 4.885
Reg. datum: 29-07-2002

EVE Online: CEO van Jovian Legacy, alliance executor van Jovian Empire. Join 'public redbox' ingame. Blink spelen? http://cogdev.net/blink/ gebruik referalcode 'jovianblink' voor gratis startcredits. IRC

Reacties: 9.504
Reg. datum: 30-06-2003


C#:
1
2
3
4
5
6
7
8
9
public string Status { getset; }

public bool IsGoedgekeurd
{
    get
    {
        return this.Status == "Goedgekeurd";
    }
}

|:( :'( |:(

Alex) wijzigde deze reactie 24-05-2013 14:57 (6%)

We are shaping the future

Reacties: 12.104
Reg. datum: 05-09-2000

Komt vaker voor, met name bij dingen waarbij zo'n string uit een externe bron komt :P

Al is het semantisch natuurlijk beter de bool op te slaan en die vergelijking in de setter te doen :+

"Your life is yours alone. Rise up and live it." - Richard Rahl

Reacties: 9.504
Reg. datum: 30-06-2003

Tsja, maar dat is hier niet het geval. Het datamodel zit in hetzelfde project als de rest van de applicatie. De status kan volgens de broncode die ik heb gevonden drie waardes hebben: Onbehandeld, Goedgekeurd en Afgewezen. Toch staat het als varchar(100) in de database.

Een enum (opgeslagen als short) of zelfs een nullable boolean zou al een stuk beter zijn geweest dan dit gedrocht.

Alex) wijzigde deze reactie 24-05-2013 15:13 (12%)

We are shaping the future

Reacties: 460
Reg. datum: 21-10-2005

Je vergeet de status "Mwah, het is nog niet goedgekeurd maar we zijn er wel mee bezig en misschien passen we dit over 2 weken aan" die er ongetwijfeld in de toekomst in moet. Dat was je niet gelukt met een nullable boolean :P.
Reacties: 1.604
Reg. datum: 18-11-2007

quote:
Alex) schreef op vrijdag 24 mei 2013 @ 15:12:
Tsja, maar dat is hier niet het geval. Het datamodel zit in hetzelfde project als de rest van de applicatie. De status kan volgens de broncode die ik heb gevonden drie waardes hebben: Onbehandeld, Goedgekeurd en Afgewezen. Toch staat het als varchar(100) in de database.

Een enum (opgeslagen als short byte) of zelfs een nullable boolean zou al een stuk beter zijn geweest dan dit gedrocht.
Als je dan toch al de moeite neemt om GEEN int te gebruiken... :)
Reacties: 9.504
Reg. datum: 30-06-2003

quote:
Davio schreef op vrijdag 24 mei 2013 @ 15:20:
[...]

Als je dan toch al de moeite neemt om GEEN int te gebruiken... :)
Even vergeten, als byte kan inderdaad ook.

Of we doen het als ntext(MAX)... :+

We are shaping the future

Reacties: 1.604
Reg. datum: 18-11-2007

quote:
Alex) schreef op vrijdag 24 mei 2013 @ 15:22:
[...]

Even vergeten, als byte kan inderdaad ook.

Of we doen het als ntext(MAX)... :+
Ja, maar ntext gaat altijd zo zeuren als je er een distinct overheen gooit. :9
Reacties: 9.504
Reg. datum: 30-06-2003

quote:
Davio schreef op vrijdag 24 mei 2013 @ 15:24:
[...]

Ja, maar ntext gaat altijd zo zeuren als je er een distinct overheen gooit. :9

SQL:
1
2
SELECT DISTINCT(CONVERT(Status as nvarchar(MAX)) AS AlleStatussen 
ORDER BY AlleStatussen ASC

Zeuren? Hoezo?

We are shaping the future

Reacties: 1.604
Reg. datum: 18-11-2007

Ja, maar daar is het geen ntext!
Niet meer althans. :(

Davio wijzigde deze reactie 24-05-2013 15:28 (26%)

Reacties: 9.504
Reg. datum: 30-06-2003

quote:
Davio schreef op vrijdag 24 mei 2013 @ 15:28:
Ja, maar daar is het geen ntext!
Niet meer althans. :(
En snel is het ook niet meer. :+

Maar ach, dan gooi je ieder jaar de database leeg, dan is het weer een maandje snel.

* heeft zulke code/werkwijze wel eens gezien. Verschrikkelijk.

We are shaping the future

Leef om te leven
Reacties: 5.976
Reg. datum: 20-08-2003

quote:
ThomasG schreef op dinsdag 21 mei 2013 @ 12:57:
Ik werd toch even nieuwsgierig naar de performance van verschillende manieren om een string om te zetten naar MD5. Ik heb drie implementaties genomen, en ToMD5_3 is het snelste. Bij 1.000.000 iteraties, op een i7-2600k:

ToMD5_1: 7075ms
ToMD5_2: 6300ms
ToMD5_3: 5752ms

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;

namespace ConsoleApplication1
{
    static class StringExtensions
    {
        public static string ToMD5_1(this string value)
        {
            StringBuilder hexadecimal = new StringBuilder();

            using (MD5 md5Hash = MD5.Create())
            {
                byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(value));

                for (int i = 0i < data.Lengthi++)
                    hexadecimal.Append(data[i].ToString("x2"));
            }

            return hexadecimal.ToString().ToLower();
        }

        public static string ToMD5_2(this string value)
        {
            byte[] data;

            using (MD5 md5 = MD5.Create())
            {
                data = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
            }

            return BitConverter.ToString(data).ToLower().Replace("-"string.Empty);
        }

        public static string ToMD5_3(this string value)
        {
            byte[] data;

            using (MD5 md5 = MD5.Create())
            {
                data = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
            }

            return data.ToHex().ToLower();
        }
    }

    static class ByteExtensions
    {
        private const string hexChars = "0123456789ABCDEF";

        public static string ToHex(this byte[] bytes)
        {
            int length = bytes.Length * 2;
            char[] hex = new char[length];
            int byteIndex = 0;

            for (int charIndex = 0charIndex < lengthcharIndex += 2)
            {
                byte byteValue = bytes[byteIndex++];
                hex[charIndex] = hexChars[byteValue / 16];
                hex[charIndex + 1] = hexChars[byteValue % 16];
            }

            return new string(hex);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int iterations = 1000000;
            Stopwatch sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_1();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());

            sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_2();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());

            sw = Stopwatch.StartNew();
            for (int i = 0i < iterationsi++)
            {
                "thisisasillystringtodosomemagicon".ToMD5_3();
            }
            sw.Stop();
            Console.WriteLine((sw.ElapsedMilliseconds).ToString());
            Console.ReadLine();
        }
    }
}

Maar als je bv een wachtwoord met MD5 (of welke andere hashing methode dan ook) genereert wil je juist dat je wat trager bent ;) Gezien het feit dat je dan moeilijker kan brute-forcen.

Mijn Twitter | Mijn website

Jongste 4 jaar-actieve user
Reacties: 4.848
Reg. datum: 19-06-2009

Iets van mezelf. Net ineens like 'WTF waarom deed ik dat zo.'. Zomaar :p
PHP:

1
2
3
4
5
6
7
8
<?php
$a = 0;
foreach ($array as $arrayitem) {
$a++;
echo $item;
if($a < count($array)) {
echo 'some stuff in between';
}
}
?>

Wat natuurlijk veel beter zo kan:
PHP:

1
<?php
echo implode('somestuffinbetween'$array);
?>

Dell U2711 *O* | Intel Core i7 2600K | 8GB RAM | Samsung Spinpoint 2TB | EVGA P67 FTW | Club3D HD6790 | Samsung 830 256GB - Alles

getfirefox.com
Reacties: 12.846
Reg. datum: 02-02-2002

quote:
sanderev66 schreef op vrijdag 24 mei 2013 @ 18:58:
[...]

Maar als je bv een wachtwoord met MD5 (of welke andere hashing methode dan ook) genereert wil je juist dat je wat trager bent ;) Gezien het feit dat je dan moeilijker kan brute-forcen.
waarom zou dat helpen? Dan kan je beter een sleep inbouwen aan het eind van de validatie-methode, scheelt je processortijd=load.
Reacties: 1.604
Reg. datum: 18-11-2007

quote:
MBV schreef op vrijdag 24 mei 2013 @ 19:41:
[...]

waarom zou dat helpen? Dan kan je beter een sleep inbouwen aan het eind van de validatie-methode, scheelt je processortijd=load.
Of exponentieel blokkeren.

Drie keer achter elkaar fout is 1 min. geblokkeerd, tien keer fout een dag, twintig keer fout een jaar. :)
Fulltime #whatpulsert
Reacties: 2.264
Reg. datum: 21-12-2004

quote:
MBV schreef op vrijdag 24 mei 2013 @ 19:41:
[...]

waarom zou dat helpen? Dan kan je beter een sleep inbouwen aan het eind van de validatie-methode, scheelt je processortijd=load.
Ik denk dat hij, hoewel daar in dit geval geen sprake van was, doelde op het feit dat het hashen best wel iets duurder mag zijn zodat bruteforcen meer tijd kost.

Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.

Reacties: 4.561
Reg. datum: 23-09-2005

quote:
MBV schreef op vrijdag 24 mei 2013 @ 19:41:
[...]

waarom zou dat helpen? Dan kan je beter een sleep inbouwen aan het eind van de validatie-methode, scheelt je processortijd=load.
Volgens mij is dat niet bedoeld voor 'zodat het op je productieserver' trager is. Maar dat als men achter het algoritme komt en de tabel met hashes ligt op straat men niet snel een betreffende hash kan bruteforcen.

Niet het bruteforcen 'live' op de server.

ZpAz wijzigde deze reactie 24-05-2013 21:46 (4%)

“Lost time is never found again.” - Benjamin Franklin

Reacties: 292
Reg. datum: 01-09-2009

quote:
F.West98 schreef op vrijdag 24 mei 2013 @ 19:06:
Iets van mezelf. Net ineens like 'WTF waarom deed ik dat zo.'. Zomaar :p
PHP:

1
2
3
4
5
6
7
8
<?php
$a = 0;
foreach ($array as $arrayitem) {
$a++;
echo $item;
if($a < count($array)) {
echo 'some stuff in between';
}
}
?>

Wat natuurlijk veel beter zo kan:
PHP:

1
<?php
echo implode('somestuffinbetween'$array);
?>

Hah, heel herkenbaar. Het is ook heel moeilijk om te omschrijven om te kijken of er een functie is. Zeker binnen php.
Leef om te leven
Reacties: 5.976
Reg. datum: 20-08-2003

quote:
Patriot schreef op vrijdag 24 mei 2013 @ 21:10:
[...]


Ik denk dat hij, hoewel daar in dit geval geen sprake van was, doelde op het feit dat het hashen best wel iets duurder mag zijn zodat bruteforcen meer tijd kost.
Precies ;) Maar ik wist niet precies waar de code voor diende :p

sanderev66 wijzigde deze reactie 24-05-2013 22:41 (8%)

Mijn Twitter | Mijn website

Reacties: 267
Reg. datum: 24-01-2011

quote:
F.West98 schreef op vrijdag 24 mei 2013 @ 19:06:
Iets van mezelf. Net ineens like 'WTF waarom deed ik dat zo.'. Zomaar :p
PHP:

1
2
3
4
5
6
7
8
<?php
$a = 0;
foreach ($array as $arrayitem) {
$a++;
echo $item;
if($a < count($array)) {
echo 'some stuff in between';
}
}
?>

Wat natuurlijk veel beter zo kan:
PHP:

1
<?php
echo implode('somestuffinbetween'$array);
?>

PHP zelf doet het zelf ook (ongeveer) zo. Het staat natuurlijk wel netter als je implode() gebruikt :)
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
PHPAPI void php_implode(zval *delimzval *arrzval *return_value TSRMLS_DC)
{

    zval         **tmp;
    HashPosition   pos;
    smart_str      implstr = {0};
    int            numelemsi = 0;
    zval tmp_val;
    int str_len;

    numelems = zend_hash_num_elements(Z_ARRVAL_P(arr));

    zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);

    while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) {

        tmp_val = **tmp;
        zval_copy_ctor(&tmp_val);
        convert_to_string(&tmp_val);
        smart_str_appendl(&implstrZ_STRVAL(tmp_val), Z_STRLEN(tmp_val));
        zval_dtor(&tmp_val);

        if (++i != numelems) {
            smart_str_appendl(&implstrZ_STRVAL_P(delim), Z_STRLEN_P(delim));
        }
        zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
    }

    smart_str_0(&implstr);

    if (implstr.len) {
        RETURN_STRINGL(implstr.cimplstr.len0);
    } else {
        smart_str_free(&implstr);
        RETURN_EMPTY_STRING();
    }
}

Niet de hele functie, alleen de relevante dingen.

Pizzalucht wijzigde deze reactie 24-05-2013 23:02 (6%)

getfirefox.com
Reacties: 12.846
Reg. datum: 02-02-2002

quote:
sanderev66 schreef op vrijdag 24 mei 2013 @ 22:41:
[...]

Precies ;) Maar ik wist niet precies waar de code voor diende :p
Daarom moet je ook een moeilijker algoritme gebruiken dan MD5, de hackers zijn over het algemeen heel goed in het efficiënt implementeren van je algoritme ;)
Fulltime #whatpulsert
Reacties: 2.264
Reg. datum: 21-12-2004

quote:
MBV schreef op zaterdag 25 mei 2013 @ 01:03:
[...]

Daarom moet je ook een moeilijker algoritme gebruiken dan MD5, de hackers zijn over het algemeen heel goed in het efficiënt implementeren van je algoritme ;)
Dat staat op zich los van het gebruikte algoritme. Als we kijken naar PHP, dan kun je middels de hash_pbkdf2 functie ook een heel goedkoop hash-algoritme gebruiken, dan moet je alleen het aantal iteraties omhoog schroeven om dezelfde hoeveelheid work te behalen als een relatief duur algoritme.

Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.

Pagina: vorige 1 ... 99 100 101 102 laatste




© 1998 - 2013 Tweakers.net B.V. Contact Over Tweakers Jouw privacy Algemene voorwaarden Cookies

Tweakers wordt uitgegeven door De Persgroep en wordt gehost door True

Website van het jaar 2012