Einfacher cryptosicherer RandomGenerator für verschiedene Datentypen

    • VB.NET
    • .NET (FX) 4.0

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

      Einfacher cryptosicherer RandomGenerator für verschiedene Datentypen

      Hallo Community

      Hier ein ganz einfacher modifizierter cryptosicherer Zufallsgenerator für alle nummerische Datentypen. Es können Zahlen wie auch Arrays angefordert werden.
      Basiert auf dem RNGCryptoServiceProvider.

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Option Strict On
      2. Option Explicit On
      3. Public Module Module1
      4. Public Sub Main()
      5. Dim cnt As Int32 = 100
      6. Dim sw As New Stopwatch
      7. Dim rnd As New CryptoRnd
      8. Dim bArr() As Byte = New Byte(cnt - 1) {}
      9. Dim iArr() As Int32 = New Int32(cnt - 1) {}
      10. Dim uiArr() As UInt64 = New UInt64(cnt - 1) {}
      11. PrintTitel()
      12. 'Cryptosichere Random-Arrays mit min/max (Nur Ganzzahlen)
      13. Dim min As Int32 = Int32.MinValue, max As Int32 = Int32.MaxValue
      14. sw.Start()
      15. If rnd.interval(Of Int32)(min, max) Then
      16. rnd.GetBytes(Of Int32)(iArr)
      17. End If
      18. sw.Stop()
      19. PrintOut(iArr, sw)
      20. Dim max2 = UInt64.MaxValue, min2 As UInt64 = CULng(10 ^ 18)
      21. sw.Restart()
      22. If rnd.interval(Of UInt64)(min2, max2) Then
      23. rnd.GetBytes(Of UInt64)(uiArr)
      24. End If
      25. sw.Stop()
      26. PrintOut(uiArr, sw)
      27. Dim min3 As Byte = Byte.MinValue, max3 As Byte = Byte.MaxValue
      28. sw.Restart()
      29. rnd.GetBytes(Of Byte)(bArr, min3, max3)
      30. sw.Stop()
      31. PrintOut(bArr, sw)
      32. 'Einzelne cryptosichere Randoms mit min/max (Nur Ganzzahlen)
      33. Dim iRnd As Int32 = rnd.next(Of Int32)(-100, 100)
      34. Dim ulRnd As UInt64 = rnd.next(Of UInt64)(1000, 123456789)
      35. Dim blRnd As Byte = rnd.next(Of Byte)(100, 200)
      36. Console.ReadKey()
      37. End Sub
      38. Private Sub PrintTitel()
      39. Console.WriteLine("Cryptographically strong Randomgenerator{0}****************************************{0}", vbCrLf)
      40. End Sub
      41. Private Sub PrintOut(Of T)(ByVal arr() As T, ByVal sww As Stopwatch)
      42. For i As Int32 = 0 To arr.Length - 1
      43. Console.WriteLine(arr(i))
      44. Next
      45. Dim typ As Type = arr(0).GetType
      46. Console.WriteLine("{3}{4}{1}{0}pcs.:{1}{2}ms.{3}{3}", arr.Length, vbTab, sww.ElapsedMilliseconds, vbCrLf, typ.ToString)
      47. End Sub
      48. End Module


      Viel Spass.

      Freundliche Grüsse

      exc-jdbi


      UPDATES:
      CryptoRnd.vb - Erste version in Vb.net - 2017
      CryptoRnd.zip - Erste Version als Vb.Net und C# - 2017
      ModifiedCryptoRng.zip - Leicht modifiziert und erweitert als Vb.Net und C# - 2019
      ModifiedCryptoRngV02.3.0.zip - Erweiterte Version als Vb.Net und C# - 2020
      ISAAC64.zip - Komplette generische Neuausarbeitung des kryptografisch sicheren Pseudozufallszahlengenerator isaac für Vb.Net und C# .Net7.0 - 2023
      Dateien
      • ISAAC64.zip

        (23,73 kB, 28 mal heruntergeladen, zuletzt: )
      • ModifiedCryptoRngV02.3.0.zip

        (22,01 kB, 112 mal heruntergeladen, zuletzt: )
      • CryptoRnd.vb

        (3,75 kB, 124 mal heruntergeladen, zuletzt: )
      • ModifiedCryptoRng.zip

        (16,89 kB, 105 mal heruntergeladen, zuletzt: )
      • CryptoRnd.zip

        (3,23 kB, 109 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „exc-jdbi“ ()

      Hi,

      ist das sowas wie der RNGCryptoServiceProvider zur Verfügung stellt? Wenn ja, gibt es bei Deinem Code irgendwelche Vorteile bzw. wie bist Du auf die Implementierung so gekommen?

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      @Trade

      Ich habs unglücklicherweise oben vergessen zu erwähnen.

      Ja es basiert auf dem RNGCryptoServiceProvider.

      Ich hab nur ein bisschen rundherum gebaut, damit man alle ganzzahlige Datentypen wie z.B. Ulong, Integer, Long etc. und NEU auch Double (0-1) anforden kann. Beim RNGCryptoServiceProvider kann man nur Byte anfordern.

      Ich hab noch eine C#-Variante hinzugefügt. Die kann man sicher noch verbessers. Vorallem der Umgang mit T und anderen Datentypen.

      Freundliche Grüsse

      exc-jdbi