Alcune domande sull'EncryptByPassPhrase

mercoledì 23 marzo 2011 - 19.07

Cyberking Profilo | Junior Member

Ciao a tutti,
sto provando ad effettuare tramite sql server alcune insert e poi delle select andando a utilizzare il metodo EncryptByPassPhrase

per ora sto scrivendo così

INSERT into miaTabella (campo1,campo2) VALUES ('prova',EncryptByPassPhrase('miaPassword', 'un due tre stella stellina'))

select CONVERT(varchar,DecryptByPassPhrase('miaPassword', campo2))as dato from miaTabella where campo1='prova'

le prime domande sono queste.
Posso fare l'encrypt con qualsiasi tipo di dato, sia numerico che varchar che ntext?
E poi ai fini di peso cosa succede ovvero
se ho un campo varchar 100 e vado a inserire un dato di lunghezza 100 criptato me lo fa fare? (questo tra poco ci arrivo sto facendo varie prove) ma sopratutto a livello di peso di kb l'encrypt quanto incede sul peso?
Ci sono grossi problemi anche di velocità ?

Grazie a tutti.
http://www.gurutour.it

lbenaglia Profilo | Guru

>le prime domande sono queste.
>Posso fare l'encrypt con qualsiasi tipo di dato, sia numerico
>che varchar che ntext?
Dai BOL: "A variable of type nvarchar, char, varchar, binary, varbinary, or nchar containing the cleartext. Maximum size is 8,000 bytes."

>E poi ai fini di peso cosa succede ovvero
>se ho un campo varchar 100 e vado a inserire un dato di lunghezza
>100 criptato me lo fa fare? (questo tra poco ci arrivo sto facendo
>varie prove) ma sopratutto a livello di peso di kb l'encrypt
>quanto incede sul peso?
Non ho capito bene la domanda: se la colonna è definita varchar(100) potrai memorizzare un valore criptato di al max 100 caratteri.
Dato che il return type della funzione ENCRYPTBYPASSPHRASE è "varbinary with maximum size of 8,000 bytes" definiscila varbinary(8000) e non sbagli più.

>Ci sono grossi problemi anche di velocità ?
A fare? Crittografare una stringa? Qualche ciclo di clock...

>Grazie a tutti.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

Cyberking Profilo | Junior Member

Intanto grazie, come sempre rapido, gentile e di grande aiuto.


>>E poi ai fini di peso cosa succede ovvero
>>se ho un campo varchar 100 e vado a inserire un dato di lunghezza
>>100 criptato me lo fa fare? (questo tra poco ci arrivo sto facendo
>>varie prove) ma sopratutto a livello di peso di kb l'encrypt
>>quanto incede sul peso?
>Non ho capito bene la domanda: se la colonna è definita varchar(100)
>potrai memorizzare un valore criptato di al max 100 caratteri.
>Dato che il return type della funzione ENCRYPTBYPASSPHRASE è
>"varbinary with maximum size of 8,000 bytes" definiscila varbinary(8000)
>e non sbagli più.
>

dato che aprendo la tabella non vedo quanti caratteri ci sono, la domanda che mi ponevo era questa:
se scrivo 10 caratteri, lui criptandoli ne scrive sempre 10 o di più? e per questo la paura di sforare se definisco un campo dieci e lui ne scrive 11 dovrebbe poi andare in errore, e pesare poi anche di più a livello di bite


>>Ci sono grossi problemi anche di velocità ?
>A fare? Crittografare una stringa? Qualche ciclo di clock...

non ne ho idea, perciò ti chiedo, se andando a criptare e decriptare tipo 5000 caratteri se cambia la velocitàù

esempio una select senza criptare ci mette 1 secondo con ci mette 1,2 secondi (è un esempio)?
ti chiedo questo sopratutto per capire quanti campi mi conviene criptare, se effettivamente quelli realmente sensibili o a questo punto tutti

Aggiungo un altra domanda
Ma in caso di where o where con like, funziona tutto?

Vado sempre a scrivere tipo considerando i dati di prima

INSERT into miaTabella (campo1,campo2) VALUES ('prova',EncryptByPassPhrase('miaPassword', 'un due tre stella stellina'))


select * from miaTabella where campo2= 'un due tre stella stellina'
e
select * from miaTabella where campo2 like '%tre%'

?

Grazie di nuovo




http://www.numero-telefono.it

lbenaglia Profilo | Guru

>dato che aprendo la tabella non vedo quanti caratteri ci sono,
>la domanda che mi ponevo era questa:
>se scrivo 10 caratteri, lui criptandoli ne scrive sempre 10 o
>di più?
Di più, ma il data type di tale colonna/variabile dovrà essere varbinary(8000)

>e per questo la paura di sforare se definisco un campo
>dieci e lui ne scrive 11 dovrebbe poi andare in errore, e pesare
>poi anche di più a livello di bite
Il problema non si pone, leggi la precedente risposta.

>non ne ho idea, perciò ti chiedo, se andando a criptare e decriptare
>tipo 5000 caratteri se cambia la velocitàù
Certo, metti in piedi un esempietto e verifica tu stesso nel tuo ambiente quanto sia questo overhead.

>esempio una select senza criptare ci mette 1 secondo con ci mette
>1,2 secondi (è un esempio)?
>ti chiedo questo sopratutto per capire quanti campi mi conviene
>criptare, se effettivamente quelli realmente sensibili o a questo
>punto tutti
E' una scelta che devi prendere tu non solo in base ai constraint fisici, ma soprattutto a quelli legali.

>Aggiungo un altra domanda
>Ma in caso di where o where con like, funziona tutto?
L'operatore LIKE si aspetta una stringa, pertanto non potrai applicare tale operatore ad una colonna varbinary (a meno di decrittarla ma capisci bene che il piano di esecuzione della query sarà pesantemente compromesso).

>Grazie di nuovo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

Cyberking Profilo | Junior Member

>>dato che aprendo la tabella non vedo quanti caratteri ci sono,
>>la domanda che mi ponevo era questa:
>>se scrivo 10 caratteri, lui criptandoli ne scrive sempre 10 o
>>di più?
>Di più, ma il data type di tale colonna/variabile dovrà essere
>varbinary(8000)
>
Ok, farò un pò di test e sopratutto cercherò per il discorso del like di valutare bene cosa criptare
giusto per chiarezza mia
quindi anche se ora ho un varchar(100) lo devo convertire in varbinary(8000) per non avere problemi?

Per ora spero che sia tutto
Grazie
http://www.numero-telefono.it
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5