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