Toon posts:

[VB.Net] Rnd() vraagje... Rnd initialiseren *

Pagina: 1
Acties:
  • 713 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

Op dit moment herschrijf ik een stuk VB code naar C# en loop ik tegen het volgende stukje aan waar ik mijn twijfels over heb:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        For i As Integer = 1 To Len(Trim(pass))
            intAddPassword += CType(Asc(Mid(pass, i, 1)), Short)
        Next

        intCharNum = CType(Rnd(-intAddPassword), Short)

        lenfile = Len(Crypt)

        For i As Integer = 1 To lenfile
            myChar = CType(Mid(Crypt, i, 1), Char)
            intCharNum = CType(Asc(myChar), Short)
            intRnd = CType(Int(256 * Rnd()), Short)
            intCharNum = intCharNum Xor intRnd
            myChar = Chr(intCharNum)
            strRemember.Append(myChar)
        Next

De Rnd en die for loop tot lijn 5 zien er voor mij useless uit.... Is dat ook zo?

Ik weet niet precies hoe die Rnd werkt en of deze geinitialiseerd wordt zodat de tweede Rnd deze herbruikt.

Iemand een idee?

Alvast bedankt,
Statix

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Als je niet verteld wat het grotere geheel is of wat de applicatie in kwestie doet, is dat natuurlijk moeilijk te zeggen voor ons. Kortom: meer informatie :)

offtopic:
Dit is net als zeggen; "Ik heb het volgende schroefje gevonden in mijn 'ding', heb ik dit nodig?".
Moeilijk te zeggen als je niet weet wat voor 'ding' het om gaat ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Topicstarter
Dit is de complete functie:

Visual Basic:
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
    Private Function Cesare(ByRef pass As String, ByRef Crypt As String) As Boolean
        Dim intAddPassword As Short = 0
        Dim intCharNum As Short
        Dim intRnd As Short
        Dim lenfile As Integer
        Dim myChar As Char
        Dim strRemember As New Text.StringBuilder

        For i As Integer = 1 To Len(Trim(pass))
            intAddPassword += CType(Asc(Mid(pass, i, 1)), Short)
        Next

        intCharNum = CType(Rnd(-intAddPassword), Short)

        lenfile = Len(Crypt)

        For i As Integer = 1 To lenfile
            myChar = CType(Mid(Crypt, i, 1), Char)
            intCharNum = CType(Asc(myChar), Short)
            intRnd = CType(Int(256 * Rnd()), Short)
            intCharNum = intCharNum Xor intRnd
            myChar = Chr(intCharNum)
            strRemember.Append(myChar)
        Next

        Crypt = strRemember.ToString

        Return True
    End Function


De functie doet .... eeehhh... een Xor op een ascii value en de random waarde.

Verwijderd

Topicstarter
[b][message=27237596,noline]
offtopic:
Dit is net als zeggen; "Ik heb het volgende schroefje gevonden in mijn 'ding', heb ik dit nodig?".
Moeilijk te zeggen als je niet weet wat voor 'ding' het om gaat ;)
Hmmm.... Het gaat er eigenlijk meer om of de eerste Rnd de tweede beinvloed.... :)

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 04 januari 2007 @ 14:36:
[...]

Hmmm.... Het gaat er eigenlijk meer om of de eerste Rnd de tweede beinvloed.... :)
Volgens mij doet hij dat wel. Want Rnd() volgt altijd een volgorde. Deze volgorde is afhankelijk van het getal waarmee Rnd() voor de eerste keer aangeroepen wordt, ook wel bekend als de 'seed'.

In jouw geval bepaald de 1e aanroep van Rnd() dus de sequence of volgorde, die Rnd in het vervolg gebruikt. In andere woorden: de 1e aanroep bepaald de uitkomst van de 2e aanroep :) Volgens mij is het stuk code niet overbodig, maar dat weet ik niet zeker.

Leesvoer.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Rnd(DateTime.Now.Ticks) is sneller en levert ook een random seed op als startwaarde.

  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-12 13:49

WormLord

Devver

Klopt, maar de code geeft juist een vaste sequence van random getallen op, zodat er voor 1 waarde van pass elke keer hetzelfde uitkomt.

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

WormLord schreef op vrijdag 05 januari 2007 @ 08:11:
Klopt, maar de code geeft juist een vaste sequence van random getallen op, zodat er voor 1 waarde van pass elke keer hetzelfde uitkomt.
Waarmee het antwoord op je vraag is: ja, het eerste stuk code is van belang, ondanks dat de waarde die intAddPassword en intCharNum krijgen daarna niet meer gebruikt worden.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Dus de initialisatie van de randomizer in deze hangt af van het password. Dat klinkt lekker veilig.
(ervanuitgaande dat de variabele 'pass' een password bevat.)

[ Voor 23% gewijzigd door Grijze Vos op 05-01-2007 10:00 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-12 13:49

WormLord

Devver

Grijze Vos schreef op vrijdag 05 januari 2007 @ 10:00:
Dus de initialisatie van de randomizer in deze hangt af van het password. Dat klinkt lekker veilig.
(ervanuitgaande dat de variabele 'pass' een password bevat.)
Als ik zo even die code bekijk, wordt er in de functie een string versleuteld of weer ontcijferd.
Door het versleutelen te doen met een reeks semi-random getallen, waarbij het password de initialisatie voor die reeks is, zal het lastiger worden om de versleutelde tekst te ontrafelen.
Tenminste, dat lijkt me zo. Niet dat ik een beveiligings expert ben of zo :) .

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
WormLord schreef op vrijdag 05 januari 2007 @ 12:38:
[...]

Als ik zo even die code bekijk, wordt er in de functie een string versleuteld of weer ontcijferd.
Door het versleutelen te doen met een reeks semi-random getallen, waarbij het password de initialisatie voor die reeks is, zal het lastiger worden om de versleutelde tekst te ontrafelen.
Tenminste, dat lijkt me zo. Niet dat ik een beveiligings expert ben of zo :) .
Nee, die semi-randomness geeft alleen maar een gevoel van sterkte, maar in feite geeft het juist niks aan security extra. Dit zijn nou van die redenen waarom belangrijke systemen af en toe zowaar briljant makkelijk zijn te kraken. Security by Obscurity is geen security.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1