Bonjour,
Le processus DSA (Algorithme de Signature Numérique) se fait en trois étapes :
• génération des clés
• signature du document
• vérification du document signé
1- Code de la génération des clés :
Imports System.Text
Imports System.Security.Cryptography
Imports System.IO
Imports System.IO.Directory
Public Class FrmDSA
Dim p, q As Integer
Dim i, num1, num2, count As Integer
Dim x, s As Integer
Dim h, y, z As Integer
Dim g, w, u1, u2 As Integer
Dim s1, s2, v As Integer
Dim PGCD, r, c, a, b, k, n, d, t As Integer
Dim preserves As Integer
Dim preserveq As Integer
Private Sub BtnGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGenerate.Click
Dim i, num1, num2, count As Integer
num1 = Val(txtnumq.Text)
count = 0
For i = 1 To num1
If num1 Mod i = 0 Then
count += 1
End If
Next
If count = 2 Then
MsgBox("'q' est premier, continuer.")
Else
MsgBox("'q' n'est pas premier. Veuillez réessayer.")
End If
num2 = Val(txtnump.Text)
count = 0
For i = 1 To num2
If num2 Mod i = 0 Then
count += 1
End If
Next
If count = 2 Then
MsgBox(" 'p' est premier, continuer.")
Else
MsgBox("'p' n'est pas premier. Veuillez réessayer.")
End If
z = (Val(txtnump.Text) - 1) / Val(txtnumq.Text)
txtnumz.Text = z
If 1 < Val(txtnumh.Text) < (Val(txtnump.Text) - 1) Then
g = (Val(txtnumh.Text) ^ z) Mod Val(txtnump.Text)
txtnumg.Text = g And g > 1
End If
If 0 < Val(txtnumx.Text) < Val(txtnumq.Text) Then
y = (Val(txtnumg.Text) ^ Val(txtnumx.Text)) Mod Val(txtnump.Text)
txtnumy.Text = y
End If
If Val(txtnumh.Text) > (Val(txtnump.Text) - 1) Or Val(txtnumx.Text) > Val(txtnumq.Text) Then
MsgBox("les valeurs de 'h' ou 'x' incorrects. Veuillez réessayer.")
End If
txtkeypub.Text = txtnump.Text + txtnumq.Text + txtnumg.Text + txtnumy.Text
txtkeypri.Text = Val(txtnumx.Text)
End Sub
2- Code de la signature du document :
Private Sub BtnSignature_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSignature.Click
If 0 < Val(txtnums.Text) < Val(txtnumq.Text) And 0 <= Val(txtnumM.Text) < Val(txtnump.Text) Then
s1 = ((Val(txtnumg.Text) ^ Val(txtnums.Text)) Mod Val(txtnump.Text)) Mod Val(txtnumq.Text)
txtnums1.Text = s1
s = Val(txtnums.Text)
q = Val(txtnumq.Text)
a = 1
b = 0
k = 0
n = 1
While q > 0
r = s Mod q
c = (s - r) / q
t = a
d = b
a = k
b = n
k = t - c * k
n = d - c * n
s = q
q = r
End While
If a > b Then
txtnumbezout.Text = a
Else : txtnumbezout.Text = b
End If
s2 = ((Val(txtnumM.Text) + (Val(txtnums1.Text) * Val(txtnumx.Text))) * Val(txtnumbezout.Text)) Mod Val(txtnumq.Text)
txtnums2.Text = s2
End If
If Val(txtnums.Text) > Val(txtnumq.Text) Or Val(txtnumM.Text) > Val(txtnump.Text) Then
MsgBox("les valeurs de 's' ou 'M' incorrects. Veuillez réessayer.")
End If
txtnumsign.Text = Val(txtnums1.Text) & Val(txtnums2.Text)
End Sub
- prochainement, je continuerai le code.