Crypt e Decrypt

Ciao a Tutti,

stavo guardando la funzionalita RSADecrypt, ma non so se serve al mio scopo. Nel senso.

Io ho un dato lo Crypto e poi devo salvarlo a DB. In un secondo momento devo rileggerlo e Decryptarlo…

Ma non capaisco come fare ci con RSADecrypt.

Mi Spiego. Fase di Crypt:

[code]If Crypto.RSAGenerateKeyPair( 1024, privateKey, publicKey ) Then
// 1024-bit private and public keys were generated

Const kMessage = “this is a test”

Dim msg As New MemoryBlock(14)
msg.StringValue(0, 14) = kMessage

// Encrypt msg using the publicKey
Dim encryptedData As MemoryBlock = Crypto.RSAEncrypt( msg, publicKey )
End if[/code]

Qui come salvo a DB la encryptedData ? Devo trasformarla in Stringa? Se si Come?

Fase di Decrypt

[code] If encryptedData <> Nil Then
MsgBox(“Successfully encrypted.”)

// Now decrypt
Dim decryptedData As MemoryBlock = Crypto.RSADecrypt( encryptedData, privateKey )
Msgbox("DecryptedData=" + decryptedData.StringValue(0, 14))

End If[/code]

In questa fase l’encryptedData devo tirarlo fuori dal database…, Corretto? ma volevo salvarlo come stringa.

Grazie e buon lavoro

trattati con EncodeBase64:

... encryptedData = EncodeBase64(encryptedData) // record nel db ... // Now decrypt Dim decryptedData As MemoryBlock = Crypto.RSADecrypt( DecodeBase64(encryptedData), privateKey )
Spiacente, non scrivo in italiano.

I mio codice:

[code]Dim valoreCriptato as String
Dim chiaveCript as String
chiaveCript = “test”

Dim msg as String
msg = “prova”

Dim encryptedData As MemoryBlock
If Crypto.RSAGenerateKeyPair( 1024, chiaveCript, chiaveCript ) Then
// 1024-bit private and public keys were generated

Dim msg As New MemoryBlock(14)
msg.StringValue(0, 14) = valore

// Encrypt msg using the publicKey
encryptedData  = Crypto.RSAEncrypt( msg, chiaveCript  )

encryptedData = EncodeBase64(encryptedData)
MsgBox(encryptedData)
valoreCriptato = encryptedData

end if

return encryptedData[/code]

Ma al return encryptedData il debug va in Crash… qualcuno sa dirmi il perch?

Con Crypto.RSAGenerateKeyPair generi la coppia di chiavi privata e pubblica.
Queste poi devono essere riutilizzate per cui ti sconsiglio di generarle in fase di crypt o decrypt

Detto questo il programma ti va in crash perch nella generazione chiami la funzione con lo stesso parametro (chiaveCript) per cui la chiave privata rimane internamente non legata e va in crash quando rilascia la relativa variabile interna.
il tuo codice riscritto cos funziona (sempre a meno della generazione di chiavi che poi … perdi)

  Dim valoreCriptato as String
  Dim pubblica as String
  dim privata as String
  
  Dim msg as String
  msg = "prova"
  
  
  If Crypto.RSAGenerateKeyPair( 1024, privata, pubblica ) Then
    Dim encryptedData As MemoryBlock
    // 1024-bit private and public keys were generated
    
    Dim mmsg As New MemoryBlock(14)
    mmsg.StringValue(0, 14) = valore
    
    // Encrypt msg using the publicKey
    encryptedData  = Crypto.RSAEncrypt( msg, pubblica  )
    
    encryptedData = EncodeBase64(encryptedData)
    MsgBox(encryptedData)
    valoreCriptato = encryptedData
    
  end if
  
  return encryptedData

Ho compreso il meccanismo. Ma ora mi chiedo… nel Decrypt devo ancora Rigenerare le chiavi corretto?

if Crypto.RSAGenerateKeyPair( 1024, privateKey, publicKey ) then // Decripta con chiave privata Dim decryptedData As MemoryBlock = Crypto.RSADecrypt(DecodeBase64( encryptedData), chiavePrivata) ..... end if

Immagino che cambi la generazione… che ho perso quella iniziale no?? Quindi nada nn funziona… mmm

No
Le chiavi le generi e in qualche mode le conservi e le riutilizzi

Rigenerandole riesci a fare il decrypt? (riottenendo il valore iniziale)

Rigenerandole non funziona da Eccezione. Devo salvarmele mi sa.

Grazie comunque per le dritte :wink: