Crittografia rijndael

mercoledì 13 luglio 2005 - 10.36

gilberto Profilo | Junior Member

Prendendo spunto dall'esempio di David De Giacomi ho scritto una applicazione windows che critta e decritta delle stringhe.
Ho impostato in un textbox ( con lunghezza 16 caratteri ) la chiave segreta ( 16 byte ) mentre tengo fisso a livello di codice il vettore di inizializzazione ( sempre di 16 caratteri ).
Finchè non modifico la chiave nel textbox và tutto bene, mentre se modifico anche solo un carattere ( mantengo sempre 16 caratteri ) mi ritrovo questo bell'errore di eccezione "Eccezione non gestita di tipo "System.Security.Cryptography.CryptographicException" in microsoft.visualbasic.dll

Informazioni aggiuntive: Il riempimento PKCS7 non è valido e non può essere rimosso."

Esiste un rimedio a tutto ciò?

Ringragrazio in anticipo per l'interessamento.

totti240282 Profilo | Guru

puoi postare il codice ???

C'è solo un capitano !!!!!!

gilberto Profilo | Junior Member

Ecco il codice e come si può notare non è nulla di eccezionale.

Imports System
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

Public Class Form1
Inherits System.Windows.Forms.Form
Public chiave1 As String
Public chiave2 As String = "8888888888888888"

#Region " Codice generato da Progettazione Windows Form "

Public Sub New()
MyBase.New()

'Chiamata richiesta da Progettazione Windows Form.
InitializeComponent()

'Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent()

End Sub

'Form esegue l'override del metodo Dispose per pulire l'elenco dei componenti.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Richiesto da Progettazione Windows Form
Private components As System.ComponentModel.IContainer

'NOTA: la procedura che segue è richiesta da Progettazione Windows Form.
'Può essere modificata in Progettazione Windows Form.
'Non modificarla nell'editor del codice.
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
Friend WithEvents TextBox4 As System.Windows.Forms.TextBox
Friend WithEvents TextBox5 As System.Windows.Forms.TextBox
Friend WithEvents TextBox6 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents Label4 As System.Windows.Forms.Label
Friend WithEvents Label5 As System.Windows.Forms.Label
Friend WithEvents Label6 As System.Windows.Forms.Label
Friend WithEvents Button3 As System.Windows.Forms.Button
Friend WithEvents TextBox7 As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.TextBox3 = New System.Windows.Forms.TextBox
Me.TextBox4 = New System.Windows.Forms.TextBox
Me.TextBox5 = New System.Windows.Forms.TextBox
Me.TextBox6 = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.Label3 = New System.Windows.Forms.Label
Me.Label4 = New System.Windows.Forms.Label
Me.Label5 = New System.Windows.Forms.Label
Me.Label6 = New System.Windows.Forms.Label
Me.Button3 = New System.Windows.Forms.Button
Me.TextBox7 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(168, 8)
Me.TextBox1.MaxLength = 16
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(216, 20)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "456dfg789wyr6789"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(400, 104)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(96, 23)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Critta"
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(400, 344)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(96, 23)
Me.Button2.TabIndex = 3
Me.Button2.Text = "Decritta"
'
'TextBox3
'
Me.TextBox3.Locatio

gilberto Profilo | Junior Member

Ecco il codice e come si può notare non è nulla di eccezionale.

Imports System
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

Public Class Form1
Inherits System.Windows.Forms.Form
Public chiave1 As String
Public chiave2 As String = "8888888888888888"

-Region " Codice generato da Progettazione Windows Form "
-End Region

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

chiave1 = Trim(Me.TextBox1.Text)

End Sub

Function encode(ByVal s As String) As Object

Dim rjm = New RijndaelManaged
Dim input, output As Byte()

rjm.KeySize = 128
rjm.BlockSize = 128
rjm.Key = ASCIIEncoding.ASCII.GetBytes(chiave1)
rjm.IV = ASCIIEncoding.ASCII.GetBytes(chiave2)

input = Encoding.UTF8.GetBytes(s)
output = rjm.CreateEncryptor().TransformFinalBlock(input, 0, input.Length)

encode = output

End Function

Function decode(ByVal s As String) As Object

Dim rjm = New RijndaelManaged
Dim input, output As Byte()

rjm.KeySize = 128
rjm.BlockSize = 128
rjm.Key = ASCIIEncoding.ASCII.GetBytes(chiave1)
rjm.IV = ASCIIEncoding.ASCII.GetBytes(chiave2)

input = Convert.FromBase64String(s)
output = rjm.CreateDecryptor().TransformFinalBlock(input, 0, input.Length)
decode = Encoding.UTF8.GetString(output)

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Me.TextBox7.Text &= Trim(Me.TextBox1.Text)
Me.TextBox7.Text &= Convert.ToBase64String(encode(Trim(Me.TextBox3.Text)))
Me.TextBox7.Text &= Convert.ToBase64String(encode(Trim(Me.TextBox4.Text)))

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

chiave1 = Mid(Me.TextBox7.Text, 1, Len(Trim(Me.TextBox1.Text)))

Me.TextBox5.Text = decode(Mid(Me.TextBox7.Text, 1 + Len(Trim(Me.TextBox1.Text)), 24))
Me.TextBox6.Text = decode(Mid(Me.TextBox7.Text, 1 + Len(Trim(Me.TextBox1.Text)) + 24, 24))

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Me.TextBox7.Clear()
End Sub

End Class

Gilbert

gilberto Profilo | Junior Member

Ecco il codice in allegato e come si potrà notare non è nulla di eccezionale.



Gilbert

gilberto Profilo | Junior Member

Ecco il codice in allegato e come si potrà notare non è nulla di eccezionale.



Gilbert

gemini81 Profilo | Newbie

Ciao a tutti!

Dopo due anni qualcuno ha scoperto come risolvere la questione?

io ho un problema quasi identico:

con questo codice

public static string DecryptString(string src) { if (src != String.Empty) { RijndaelManaged rjm = new RijndaelManaged(); rjm.KeySize = 128; rjm.BlockSize = 128; rjm.Key = Classes.Impostazioni.RijndaelKey; rjm.IV = Classes.Impostazioni.RijndaelIV; try { ICryptoTransform ct = rjm.CreateDecryptor(); Byte[] input = Encoding.UTF8.GetBytes(src); Byte[] output = ct.TransformFinalBlock(input, 0, input.Length); return Encoding.UTF8.GetString(output); } catch ( System.Exception ex ) { return src; } } return src; }

l'istruzione ct.TransformFinalBlock mi lancia l'eccezione
System.Security.Cryptography.CryptographicException
con il seguente messaggio:
Il riempimento non è valido e non può essere rimosso.

Come posso fare?

lux Profilo | Newbie

Il problema risiede nel come componi la stringa che devi decifrare ... se ci fai caso non stai ripassando lo stesso buffer di dati che hai crittografato.
Prova a pensare se nell'array di byte crittografati ti trovi un valore 0 ... l'encoding come lo converte in stringa e di conseguenza dopo come lo riporti a buffer di byte?
se hai ulteriori dubbi fammi sapere.
ciao tax
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5