Eine RSA-Test -App

    • VB.NET

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

      Eine RSA-Test -App

      Ich will an dieser Stelle die neue Version meines Programms vorstellen, an dem ich ab und zu etwas verändere, weil mir gelegentlich Ideen für Veränderungen einfach so einfallen.

      Hier ist zunächst die Programmbeschreibung :

      Mein Programm hat den Zweck , für das RSA-Verschlüsselungsverfahren die Entstehung der Schlüsselpaare, welche man zur Ver- und Entschlüsselung braucht, vorzuführen. Mein Programm funktioniert so, dass man 2 kleine Primzahlen in den ersten beiden TextBoxen eingibt und dann auf den Button 1 drückt. Dann wird einem eine Liste von 30 Zahlen vorgeschlagen, die sich dafür eignen, als Verschlüsselungsexponent e verwendet zu werden. Warum nur 30 ? Ich habe diese Grenze eingebaut, weil je größer die verwendeten Primzahlen werden, desto mehr mögliche e gibt es. Ich weiß das, weil die Anzahl der möglichen e in meinem Programm mitgezählt und ausgegeben wird . Ich wollte nicht, dass mein Programm nach dem Drücken von Button 1 zu viel Zeit braucht, um die Ausgabe der Liste von möglichen e zu erstellen. Wenn man sich für ein e entschieden hat, gibt man dieses e in die 3 te Textbox ein und denkt sich dann eine Zahl aus, die man verschlüsseln will und gibt diese in die 4 te Textbox ein. Danach drückt man auf den Button 3 damit man sehen kann wie schnell die Funktion getPrivateKey den Entschlüsselungs Exponenten d berechnen kann. Wenn man dann auf den Button 2 drückt wird einem der Entschlüsselungs Exponent d noch mal auf eine andere Art berechnet. Außerdem wird der Geheimtext berechnet. Wenn durch diese andere Art der Berechnung ein anderes d errechnet, wird als die Funktion getPrivateKey es getan hat, wird vorgeführt was für ein Klartext sich mit dem falschen d und dem richtigen d aus dem Geheimtext errechnen lässt. Wobei das Unterprogramm für Mod Berechnungen mit dem falschen d nur dann richtig rechnet, wenn der Exponent positiv ist. Leider funktioniert das Programm nur mit sehr kleinen Primzahlen, die nicht größer als 100 sein sollten, wenn die Berechnung nicht zu lange dauern soll. Der Vorteil an meinem Programm ist aber, dass man im Formular bevor man Button 2 drückt, nur einen Haken setzen muss um beide Lösungen der Gleichung e mal d + k mal Phi(N) = 1 sehen zu können. Allerdings dauert dann die Berechnung noch länger als wenn man nur eine Lösung sehen will.

      Hier ist ein Beispiel bei denen beide Programme ein unterschiedliches d berechnen:

      Wenn man mit den Primzahlen 127 und 131 ein Phi(N)= 16380 und ein e = 43
      eingibt berechnet das Programm, was ich selbst geschrieben habe, für
      d den Wert 11047 aus. Die Berechnung hat auf meinem PC 3 Minuten und
      51 Sekunden gedauert, ohne dass ein Haken gesetzt wurde. Wenn der
      Haken gesetzt wurde, dauert die Berechnung auf meinem PC 16 Minuten
      und 33 Sekunden. die Funktion : getPrivateKey rechnet für d den Wert -5333 aus, kann
      dieses Ergebnis aber sofort liefern.

      Um das Programm ausführen zu können muss man sich zunächst das Programm Visual Studio 2022 herunterladen.
      Das geht von der Seite: visualstudio.microsoft.com/de/

      Danach muss man innerhalb des Programms Visual Studio als Projekt Typ: Windows Form App (.Net Framework)Visual Basic oder Windows Forms App Visual basic auswählen , genau weiß ich das nicht mehr so genau, ich vermute aber auch, dass es egal ist.

      Hier ist der Formularentwurf, damit man sehen kann, wie ich die Buttons, Textboxen , Labels und die eine CheckBox gesetzt habe.



      Wenn man auf dem Formularentwurf die Labels Buttons und Textboxen setzt, entstehen im Arbeitsbereich immer kleine Unterprogramme die mit Code aufgefüllt werden müssen. Der Code für die entstandenen Unterprogramme sowie der Rest meines Programmes kann einfach nur durch kopieren über die Zwischenablage nutzbar gemacht werden. Falls man den Code kopiert hat und das Projekt gestartet hat, kann man zum Beispiel die folgende Ausgabe sehen :



      Hier ist nun der komplette Programmcode :

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Public Class Form1
      2. Public a, b, R, c, m, pot, W, Q As Integer
      3. Public P As ULong
      4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      5. Dim P, N, Z, x As Integer
      6. Dim moeg As String
      7. x = 0
      8. Q = 0
      9. moeg = " "
      10. P = (a - 1) * (b - 1)
      11. N = a * b
      12. For W = 1 To P
      13. If EUCLID_RECURSIVE(P, W) = 1 Then
      14. Q = Q + 1
      15. End If
      16. Next
      17. For Z = 1 To P
      18. If EUCLID_RECURSIVE(P, Z) = 1 And x < 30 Then
      19. x = x + 1
      20. moeg = moeg & " Der ggT von Phi( N) : " & P & " und e : " & Z & " = " & EUCLID_RECURSIVE(P, Z) & Chr(13)
      21. End If
      22. Next
      23. Label1.Text = "RSA Modul: N = p mal q = " & a & " mal " & b & " = " & N & Chr(13) _
      24. & " Phi (n) = (P-1) mal (q-1) = " & "(" & a & "-1) * (" & b & "-1) = " & P & Chr(13) _
      25. & " Wähle eine zu Phi (N) teilerfremde Zahl e , für die gilt 1 < e < Phi(N)" & Chr(13) _
      26. & " Ausserdem gilt das der ggt von e und Phi(N) = 1 " & Chr(13) _
      27. & " Es werden hier maximal die ersten 30 möglichen e aufgelistet " & Chr(13) _
      28. & "tatsächlich gibt es " & Q & " mögliche e " & Chr(13) & moeg & Chr(13) _
      29. & " wählen sie nun ein e aus der Liste aus" & Chr(13) _
      30. & "und geben es in das 3te Eingabefeld ein" & Chr(13) _
      31. & "dazu denken sie sich bitte eine Zahl aus," & Chr(13) _
      32. & " die sie verschlüsseln wollen und geben diese in das" & Chr(13) _
      33. & "4 te Eingabefeld ein und drücken dann auf den Button 3 " & Chr(13) _
      34. & " damit sie nach kurzer Zeit ein D ausgerechnet bekommen " & Chr(13) _
      35. & "und danach auf den Button 2 damit sie " & Chr(13) _
      36. & "eventuell ein anderes D ausgerechnet bekommen " & Chr(13)
      37. End Sub
      38. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
      39. If IsNumeric(TextBox1.Text) = True Then
      40. a = CInt(TextBox1.Text)
      41. End If
      42. End Sub
      43. Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
      44. If IsNumeric(TextBox2.Text) = True Then
      45. b = CInt(TextBox2.Text)
      46. End If
      47. End Sub
      48. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      49. Dim i, x, Y, k, d, N, KL1, KL2, C1, C2, DN, GA, GB, kla, klb, kln, DP, DQ, RP, RQ, ST, Unterschied, Min, Sek As Integer
      50. Dim Ausg, Zeit As String
      51. Dim Erg, P As Long
      52. Dim Zeit1, Zeit2 As Date
      53. ' Label1.Text = "" Falls man beim Setzen der Buttons und Labels mehr Platz braucht, würde dieser Befehl einen Sinn machen.
      54. Zeit1 = DateAndTime.Now
      55. N = a * b
      56. P = (a - 1) * (b - 1)
      57. If P > R Then
      58. Y = P
      59. Else
      60. Y = R
      61. End If
      62. Ausg = ""
      63. If CheckBox1.Checked = True Then
      64. ST = -Y
      65. Else
      66. ST = 1
      67. End If
      68. For i = ST To Y
      69. For x = ST To Y
      70. Erg = (i * R) - x * P
      71. If Erg = EUCLID_RECURSIVE(P, R) Then
      72. d = i
      73. k = -1 * x
      74. If d > 0 Then
      75. Ausg = Ausg & CStr(i) & " mal " & CStr(R) & " minus " & CStr(x) & " mal " & CStr(P) & " = " _
      76. & CStr(EUCLID_RECURSIVE(P, R)) & Chr(13)
      77. Else
      78. Ausg = Ausg & CStr(i) & " mal " & CStr(R) & " plus " & CStr(-x) & " mal " & CStr(P) & " = " _
      79. & CStr(EUCLID_RECURSIVE(P, R)) & Chr(13)
      80. End If
      81. Exit For
      82. Exit For
      83. End If
      84. Next
      85. Next
      86. RP = R Mod (a - 1)
      87. RQ = R Mod (b - 1)
      88. KL1 = m Mod a
      89. KL2 = m Mod b
      90. C1 = ModbermitPotenz(KL1, RP, a)
      91. C2 = ModbermitPotenz(KL2, RQ, b)
      92. c = China(C1, a, C2, b) Mod N
      93. 'oc = ModbermitPotenz(m, R, N) Kontrolle ob ohne chinesischen Restsatz die Rechnung das gleiche ergibt.
      94. Zeit2 = DateAndTime.Now
      95. Unterschied = DateAndTime.DateDiff(DateInterval.Second, Zeit1, Zeit2)
      96. If Unterschied > 60 Then
      97. Min = DateAndTime.DateDiff(DateInterval.Minute, Zeit1, Zeit2)
      98. Sek = Unterschied Mod 60
      99. Zeit = " Die Rechenzeit hat : " & Min & " Minuten und " & Sek & " Sekunden betragen" & Chr(13)
      100. Else
      101. Zeit = " Die Rechenzeit hat : " & Unterschied & " Sekunden betragen" & Chr(13)
      102. End If
      103. Label5.Text =
      104. " Es beginnt die Berechnung der Inversen zu e modulo Phi(N), es gilt :" & Chr(13) _
      105. & " d mal e + k mal Phi(N) = 1 " & Chr(13) _
      106. & Ausg & Chr(13) & "daraus folgt das d = " & d & " und k = " & k & Chr(13) _
      107. & " Um eine Nachricht m zu verschlüsseln, verwendet der Absender die Formel : " & Chr(13) _
      108. & "C= m hoch e Mod N und erhält so aus der Nachricht m den Geheimtext c , " _
      109. & Chr(13) & m & " Hoch " & R & " Mod " & N & "=" & c & Chr(13) _
      110. & " Das Chiffrat ist also " & c & Chr(13) _
      111. & " Der Geheimtext c kann durch modulare Exponentiation" & Chr(13) _
      112. & "wieder zum Klartext m entschlüsselt werden." & Chr(13) _
      113. & " Der Empfänger benutzt die Formel :" & Chr(13) _
      114. & " m = c hoch d Mod N mit dem nur ihm bekannten Wert d sowie N. " & Chr(13) _
      115. & c & " hoch " & d & " Mod " & N & "= " & m & " Der Klartext ist also " & m & Chr(13) _
      116. & Zeit
      117. DN = GetPrivateKey(R, P)
      118. If DN <> d Then
      119. DP = DN Mod (a - 1)
      120. DQ = DN Mod (b - 1)
      121. GA = c Mod a
      122. GB = c Mod b
      123. kla = ModbermitPotenz(GA, DP, a)
      124. klb = ModbermitPotenz(GB, DQ, b)
      125. kln = China(kla, a, klb, b) Mod N
      126. ' kont = ModbermitPotenz(c, DN, N) Kontrolle ob ohne chinesischen Restsatz die Rechnung das gleiche ergibt.
      127. Label6.Text = Label6.Text & Chr(13) & " Wenn man dieses andere D in die Formel : " & Chr(13) _
      128. & " m = c hoch d Mod N eingibt und das Chiffrat benutzt,
      129. was durch die Methode unter Button 2 berechnet wurde, " & Chr(13) _
      130. & "ergibt sich die folgende Rechnung : " & c & " hoch " & DN & " Mod " & N & Chr(13) _
      131. & " und es kommt der folgende Klartext heraus : " & CStr(kln) & Chr(13)
      132. ' & "Nur zur Kontrolle : Klartext ohne chinesischen Restsatz = " & kont
      133. End If
      134. End Sub
      135. Private Sub TextBox4_TextChanged(sender As Object, e As EventArgs) Handles TextBox4.TextChanged
      136. If IsNumeric(TextBox4.Text) = True Then
      137. m = CInt(TextBox4.Text)
      138. End If
      139. End Sub
      140. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      141. Label2.Text = " Ein Rechner für das Testen von 2 Primzahlen siehe :https://de.wikipedia.org/wiki/RSA-Kryptosystem
      142. Geben sie nun die beiden Primzahlen ein und drücken auf den Button 1
      143. Primzahl1 Primzahl2 "
      144. Label3.Text = " hier das e eingeben"
      145. Label4.Text = " hier kommt eine Zahl hin,
      146. die verschlüsselt werden soll"
      147. CheckBox1.Text = " Hier einen Haken setzen, wenn man 2 Lösungen
      148. der Gleichung: e mal d + k mal Phi (N) = 1 sehen will "
      149. Label1.Text = " Hier ist die Liste der ersten 32 Primzahlen
      150. Wenn sie sich die größeren Zahlen aus der Liste aussuchen,
      151. werden sie verstehen, weshalb ich bei Button 2 eine Zeitmessung
      152. in das Programm eingebaut habe :
      153. 2 , 3 ,5, 7
      154. 11, 13 , 17 , 19
      155. 23, 29, 31, 37,
      156. 41, 43, 47, 53,
      157. 59, 61, 67, 71,
      158. 73, 79, 83, 89,
      159. 97, 101, 103, 107
      160. 109, 113, 127, 131,"
      161. End Sub
      162. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      163. Dim P = (a - 1) * (b - 1)
      164. Label6.Text = "Durch die Funktion : getPrivateKey berechnetes D : " & GetPrivateKey(R, P) & Chr(13)
      165. End Sub
      166. Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
      167. If IsNumeric(TextBox3.Text) = True Then
      168. R = CInt(TextBox3.Text)
      169. End If
      170. End Sub
      171. Function EUCLID_RECURSIVE(P, R) 'Unterprogramm zur Anwendung des euklidische Algorithmus
      172. ' von daher zur Berechnung des größten gemeinsamen Teilers zweier natürlicher Zahlen
      173. Dim Ergebnis As Integer
      174. If R = 0 Then
      175. Ergebnis = P
      176. Else
      177. Ergebnis = EUCLID_RECURSIVE(R, P Mod R)
      178. End If
      179. EUCLID_RECURSIVE = Ergebnis
      180. End Function
      181. Function China(a1, m1, a2, m2) 'Unterprogramm zur Anwendung des chinesischen Restsatz mit 2 Kongruenzen
      182. Static INV1, INV2, x, y, w, z, Erg
      183. Do
      184. INV1 = INV1 + 1
      185. x = m2 * INV1
      186. y = x Mod m1
      187. Loop Until (y = 1)
      188. Do
      189. INV2 = INV2 + 1
      190. w = m1 * INV2
      191. z = w Mod m2
      192. Loop Until (z = 1)
      193. Erg = (a1 * m2 * INV1) + (a2 * m1 * INV2)
      194. China = Erg
      195. End Function
      196. Private Function GetPrivateKey(R As Integer, P As Integer) As Integer
      197. Dim b As Integer = P 'Unterprogramm zur schnellen Ermittlung eines D
      198. Dim d As Integer = 1
      199. Dim u As Integer = 0
      200. While b <> 0
      201. Dim q As Integer = R / b
      202. Dim b1 As Integer = b
      203. b = R - q * b
      204. R = b1
      205. Dim u1 As Integer = u
      206. u = d - q * u
      207. d = u1
      208. End While
      209. Return d
      210. End Function
      211. Public Function ModbermitPotenz(a As Integer, b As Integer, n As Integer) 'Unterprogramm für Mod Berechnungen von Potenz- Zahlen
      212. Dim result As Integer = 1
      213. For i As Integer = 0 To b - 1
      214. result *= a
      215. result = result Mod n
      216. Next
      217. Return result
      218. End Function
      219. End Class

      *Topic verschoben, Spoiler-Tag eingefügt*

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

      loosm schrieb:

      weil mir gelegentlich Ideen für Veränderungen einfach so einfallen


      Dann wäre der Rauswurf des VisualBasic Namespace meine erste Wahl gewesen.
      Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
      Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
      Denn neben dem von @Akanel leider noch vorhandenen VB6-Namespace ist z.B. Zeile#219 Option Strict Off
      Die Benennung von Codeteilen ist grausig. Eine Function sollte so benannt werden, dass klar ist, was sie zurückgibt. China erfüllt diese Bedingung definitiv nicht. Auch die ganzen eher kryptisch anmutenden Variablennamen sind nicht für das Verständnis förderlich. Das mag vor 30 Jahren, als man nur wenig Zeichen an einen Namen vergeben durfte, legitim. Heutzutage ist es einfach nur eine Verständnisbremse.
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
      Hier ein paar Anmerkungen.

      Du hast zum Teil die Variablen die in Funktionen übergeben werden zum Teil nicht eindeutig deklariert.
      Bei den Ausgaben Deiner großen Texten in die Labels ist der linke Einzug der Text zum Teil grausam.
      Ich würde bei den Funktionen zuerst die Funktionsdefinition angeben und dann mit die mit den Werten gefüllte Funktion ausgeben.
      Nimm doch statt Phi den richtigen griechischen Buchstaben φ in den Funktionen.
      NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
      Omg, die GUI ist die grausamste, die ich jeh gesehen habe ! 8| <X X/ :D
      Control Benahmung WTF !
      Viel zu viel Whitespace !
      Die Anordnung der Controls ist auch eher suboptimal.
      Die Primzahlen, würde ich in einer ComboBox anbieten, das ist Komfortabler.

      Beim Code siehts auch nicht viel besser aus:
      Alles sollte so benannt werden, daß auf einen Blick erkennbar ist, worum es sich handelt !
      Die Verkettung der Strings, ist extrem unübersichtlich, besser wäre es String.Format,
      oder String interpolation, oder einen StringBuilder zu nutzen.
      Die vielen (willkürlichen ?) Leerzeilen machen den Code insgesammt sehr unübersichtlich.

      Edit: Hinweis auf StringBuilder hinzugefühgt.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „FormFollowsFunction“ ()

      Neu

      Eine Antwort auf das zahlreiche Feedback.

      Ich habe versucht, im Projektmappen Explorer unter References /Allgemein / unter der Überschrift Import Namespaces den Haken für
      Microsoft. VisualBasic zu entfernen. Ich vermute, dass dies nur dann möglich ist, wenn man ein Projekt ganz frisch angelegt hat und noch
      nichts daran verändert hat. Ich würde diesen Haken beim nächsten neuen Projekt entfernen.

      Ich will kurz begründen, weshalb ich das Formular so gestaltet hatte, wie ich es nun eben getan hatte.
      Ich habe eine Weile an der Länge der Strings und der Platzierung der Labels herumprobiert. Der Grund hierfür war der folgende : Ich wollte, dass die Texte sich nicht bei der Ausgabe überschneiden. Eine mögliche Überschneidung wäre zum Beispiel gewesen, dass der Text, der nach dem Drücken von Button 2 entsteht, in die Auflistung der möglichen e hineinreicht.
      Dies passiert weder dann, wenn nur 4 mögliche e angezeigt werden, noch dann, wenn 30 mögliche e angezeigt werden. Auch wenn ich die
      Formulargestaltung noch mal verändern würde, wäre für mich die Lesbarkeit der Texte das einzige Kriterium bei der Gestaltung des Formulars.
      Warum ?
      Es ist nur ein kleines Programm, welches den Zweck hat , für das RSA-Verschlüsselungsverfahren die Entstehung der Schlüsselpaare, welche man zur Ver- und Entschlüsselung braucht, vorzuführen. Menschen, die zum Beispiel als Hausaufgabe aufbekommen haben, die Entstehung der Schlüsselpaare mit kleinen Zahlen zu simulieren, könnten damit
      ihre Hausaufgabe kontrollieren. Wäre in diesem Fall etwas anderes als die Richtigkeit der Berechnungen und die Lesbarkeit der Texte von Bedeutung ? Ich glaube nicht.

      Ich habe im Visual Studio zunächst nur unter Extras / Optionen / VB-Standart die Option Strikt von Off auf On umgestellt. Danach hatte
      ich das Programm gestartet und es funktionierte noch ohne jegliche Veränderung. Erst als ich auch im Projektmappen Explorer unter
      Compile /Allgemein die Möglichkeit gefunden hatte die Option Strikt von Off auf On umzustellen,
      gab es beim Funktionstest 51 Fehlermeldungen. Die häufigste : Option Strict On erfordert, dass alle Funktions-, Eigenschafts- und Operator
      Deklarationen eine As-Klausel enthalten. Aber auch andere wie zum Beispiel : Option Strict On lässt keine implizite Konvertierungen
      von „Objekt“ in Integer zu oder Option Strict On lässt keine implizite Konvertierungen von „Objekt“ für den Mod Operator zu.
      Es ein paar Stunden gedauert , bis ich alle entfernen konnte. Das erstaunliche war, dass das Programm nach dem Entfernen der Fehler schneller rechnen konnte als
      vorher. Bezogen auf das Beispiel mit den Primzahlen 127 und 131, einem Phi(N)= 16380 , ein e = 43 und gesetzten Haken rechnet das Programm nicht mehr 16 Minuten und 33
      Sekunden, sondern nur noch 54 Sekunden. Deshalb bin ich wirklich dankbar für diesen Hinweis.

      In Bezug auf die Funktion China hatte ich geglaubt, dass, was ich als Kommentierung geschrieben hatte ausreichend wäre : 'Unterprogramm
      zur Anwendung des chinesischen Restsatzes mit 2 Kongruenzen. Warum ? Wenn man zum Beispiel bei Google den Suchbegriff chinesischer
      Restsatz mit 2 Kongruenzen eingibt, findet man doch zahlreiche Angebote für eine Erklärung. Ich könnte die Funktion China natürlich in Chinesischer-Restsatz umbenennen
      und die erhaltenen Variablen , die ich INV1 und INV2 genannt habe, umbenennen in Inverse1 und Inverse2. Ich frage mich aber ob das wirklich hilfreich wäre. Man wäre dann doch genauso gezwungen, nach einer Erklärung zu suchen.
      Ich würde die nun schnellere Version meines Programms gerne unter diesem Link erneut veröffentlichen, wenn ich das machen würde,
      könnte ich natürlich mehr machen als bei jeder der Unterfunktionen: : EUCLID_RECURSIVE, China , GetPrivateKey und ModbermitPotenz nur eine kurze Kommentierung im Code zu hinterlassen. Ich könnte in Bezug auf die Unterfunktionen auch ausführlich beschreiben, was sie annehmen, was sie ausgeben und warum ich sie in
      mein Programm integriert habe. Wenn ich die neue Version meines Programms veröffentliche, würde ich versuchen die Kommentierung
      nicht nur für die Unterfunktionen, sondern für den restlichen Code des Programms zu verbessern.

      PS.

      Danke für die vielen weitere Hinweise, wie zum Beispiel den mit dem φ, die vielen informativen Links und den mit der ComboBox.
      .

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „loosm“ ()

      Neu

      Der Geschwindigkeitsunterschied dürfte wahrscheinlich daran liegen, dass der Compiler aufgrund von Option Strict On nicht mehr selber rausfinden muss, von welchem Typ etwas ist. Bei Off muss er immer selber entscheiden und das beste draus machen. Das kann dauern, vor allem bei extrem vielen Berechnungen. Nun, da Du explizit angibst, welcher Datentyp gebraucht wird, entfällt das. Aber es wird wohl nicht nur daran gelegen haben.
      Das mit dem neuen Code: Du könntest ihn hier in einem Folgepost neu hochladen und im ersten Post einen Verweis auf den neuen, späteren Code geben. Der erste Post muss aber ansonsten inhaltlich so bleiben, sonst kommt die Moderation vorbei und macht das rückgängig, weil es schon Reaktionen gab.

      loosm schrieb:

      Ich könnte die Funktion China natürlich in Chinesischer-Restsatz umbenennen
      und die erhaltenen Variablen , die ich INV1 und INV2 genannt habe, umbenennen in Inverse1 und Inverse2. Ich frage mich aber ob das wirklich hilfreich wäre.
      Nein, das genannte ergibt auch keinen Sinn. Auch eine Kommentierung ist nicht hilfreich. Überlege, was die Funktion macht, oder besser: Eine Function gibt etwas zurück. Was genau gibt sie zurück? China gibt sie definitiv nicht zurück. Sie gibt einen Wert zurück. Aber welchen Wert? Was bedeutet er?

      loosm schrieb:

      Ich habe versucht, im Projektmappen Explorer unter References /Allgemein / unter der Überschrift Import Namespaces den Haken für
      Microsoft. VisualBasic zu entfernen. Ich vermute, dass dies nur dann möglich ist, wenn man ein Projekt ganz frisch angelegt hat und noch
      nichts daran verändert hat. Ich würde diesen Haken beim nächsten neuen Projekt entfernen.
      Nein, das geht bei .NET-Projekten so nicht. Das hatte ich hier beschrieben, auch, wie Du es jetzt noch machen kannst.
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()