Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pitanje o hash-iranju objekta

[es] :: .NET :: Pitanje o hash-iranju objekta

[ Pregleda: 1568 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ivanr1982

Član broj: 100812
Poruke: 22
*.webhouse.co.yu.



Profil

icon Pitanje o hash-iranju objekta30.07.2009. u 08:34 - pre 179 meseci
Recimo da imam aplikaciju koja prima narudžbinu. Sad mi je cilj da zapamtim heš kod te narudžbine i sačuvam u bazi (a možda i kupac dobije isti), da bi posle ako dođe do nesporazuma sa kupcem mogao da pokažem da je to što je u bazi njegova originalna narudžbina. Ne bih da ulazim u logičku oprvdanost postupka, ali neka bude da će sve to jednog dana imati smisla. Sad je moje pitanje kako uzeti heš kod porudžbine. Pošto radim u .NET-u preći ću na konkretan primer. Moja prva ideja je da uzmem heš kod objekta DataTable koji sadrži upit odgovarajuće porudžbine. Sad me interesuje da li će heš kod koji uzmem pri porudžbini odgovarati heš kodu koji ću eventualno ponoviti i dobiti iste redove iz baze (npr. 3 reda dve kolone 2 54123 | 3 11111 | 1 44512). Ako ću dobiti, interesuje me da li je taj heš kod nezavisan od platforme, framework-a... Ako pokrenem aplikaciju na dva računara da li ću sa istim upitom dobiti i iste heš kodove.

Druga opcija je da rezultat upita prebacim u XML, pa da uzmem heš kod od dokumenta, ali ne znam da li postoji ikakva razlika od prethodnog načina. A opet bih ovo da izbegnem, jer bih na taj način čuvao porudžbinu i u bazi i u XML-u, a to prosto ne volim :-)
Always look on the bright side of life!
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
91.150.121.*



+67 Profil

icon Re: Pitanje o hash-iranju objekta04.08.2009. u 18:23 - pre 179 meseci
pod (prilicno ociglednim) uslovom da u oba slucaja koristis istu hash funkciju , da , na bilo kojoj platformi ces za iste podatke dobiti istu hash vrednost

nema nikakve sustinske razlike izmedju hashovanja upita za bazu ili hashovanja XML dokumenta sa istim podacima, osim sto ce hash vrednost biti drugacija ...
 
Odgovor na temu

ivanr1982

Član broj: 100812
Poruke: 22
95.180.47.*



Profil

icon Re: Pitanje o hash-iranju objekta04.08.2009. u 19:44 - pre 179 meseci
Sad ću malo da odlutam od teme, jer bi ovo sad više trebalo da stoji u .NET delu foruma, ali da ne otvaram novu temu. Problem mi je sto getHashCode() za DataTable vraća istu vrednost za bilo koji upit. Sad sam prebacio DataTable u niz Bajtova: Array<Byte> i uzeo hash code od ovog objekta. Da li je sad ovaj postupak prebacivanja objekta u bajtove nezavisan od framework-a, platforme itd.? Ili je bolja opcija da koristim namespace Cryptography i da tu probam da nađem neku heš funkciju koja bi radila korektno za DataTable?
Always look on the bright side of life!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Pitanje o hash-iranju objekta04.08.2009. u 20:33 - pre 179 meseci
Iz MSDN dokumentacije:

"The default implementation of the GetHashCode method does not guarantee unique return values for different objects. Furthermore, the .NET Framework does not guarantee the default implementation of the GetHashCode method, and the value it returns will be the same between different versions of the .NET Framework. Consequently, the default implementation of this method must not be used as a unique object identifier for hashing purposes"

Toliko o tome. Sta vise, iako vraca 32bita vrednost, malo poznata cinjenica je da default .NET implementcija (ona koja poziva interni InternalGetHashCode()) ima samo rezoluciju od 26 bitova. U svakom slucaju ne bi trebao da je koristis, a sve i da radi ne bi trebao da je koristis nad DataTable objektom jer to nije objekat u kome se nalaze podaci, ja cak ne bi koristio ni DataRow za generisanje digesta vec bih najverovatnije spakovao record u neki binarni blob ili XML (pod istom serijalizacijom) i onda njega hashovao.

Sad nazad na kriptografiju, hash nije nikakav dokaz porudzbine i sam po sebi nema apsolutno nikakve non-repudiation karakteristike. Kao sto si generisao originalni hash isto tako mozes da generises novi hash za izmenjenu porudzbinu i tvoj dokaz nije nikakav dokaz i to nijednog dana nece imati smisla.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Vreljanski Milan
Milan Vreljanski
Obrenovac

Član broj: 31700
Poruke: 121
93.86.179.*

Sajt: www.networks.co.yu


+2 Profil

icon Re: Pitanje o hash-iranju objekta24.09.2009. u 13:52 - pre 177 meseci
Ja koristim jednu gotovu klasu skinuo sa neta. Jednostavno to je jedna klasa, koju pozovem crc32-ujem nesto i upisem key u bazu sledeci put kqada proveravam neki novi fajl koji unosim, uporedim crc32 i ako je isti... ma kontas vec kako ide. evo ti cele klase:

Code:
Option Strict On

      Option Explicit On



      Imports System.Security.Cryptography



Namespace xous.Security.Cryptography


    Public Class CRC32

        Inherits HashAlgorithm



        Private Const _DefaultPolynomial As Integer = &HEDB88320



#Region " Member Variables "

        Private _Table() As Integer

        Private _CRC32 As Integer = &HFFFFFFFF

        Private _Polynomial As Integer

#End Region



#Region " Contructors "

        Public Sub New()



            Me.HashSizeValue = 32 ' CRC32 is a 32bit hash



            _Polynomial = _DefaultPolynomial



            Initialize()



        End Sub



        Public Sub New(ByVal Polynomial As Integer)

            _Polynomial = Polynomial

        End Sub



#End Region



#Region " HashAlgorithm "



        Protected Overrides Sub HashCore(ByVal array() As Byte, ByVal ibStart As Integer, ByVal cbSize As Integer)



            Dim intLookup As Integer

            For i As Integer = 0 To cbSize - 1

                intLookup = (_CRC32 And &HFF) Xor array(i)

                'This is a workaround for a right bit-shift because vb.net

                'does not support unsigned Integers, so _CRC32 >> 8

                'gives the wrong value (any better fixes?)

                _CRC32 = ((_CRC32 And &HFFFFFF00) \ &H100) And &HFFFFFF

                _CRC32 = _CRC32 Xor _Table(intLookup)

            Next i

        End Sub


        Protected Overrides Function HashFinal() As Byte()

            Return BitConverter.GetBytes(Not _CRC32)

        End Function



        Public Overrides Sub Initialize()

            _CRC32 = &HFFFFFFFF

            _Table = BuildTable(_Polynomial)

        End Sub





#End Region



#Region " Helper Methods "

        ''' <returns>The CRC32 Table based on the Polynomial given</returns>

        Private Shared Function BuildTable(ByVal Polynomial As Integer) As Integer()

            Dim Table(255) As Integer

            Dim Value As Integer



            For I As Integer = 0 To 255

                Value = I

                For X As Integer = 0 To 7

                    If (Value And 1) = 1 Then

                        'This is a workaround for a right bit-shift because vb.net

                        'does not support unsigned Integers, so _CRC32 >> 1

                        'gives the wrong value (any better fixes?)

                        Value = Convert.ToInt32(((Value And &HFFFFFFFE) \ 2&) And &H7FFFFFFF)

                        Value = Value Xor Polynomial

                    Else

                        'Same as above.

                        Value = Convert.ToInt32(((Value And &HFFFFFFFE) \ 2&) And &H7FFFFFFF)

                    End If

                Next

                Table(I) = Value

            Next



            Return Table

        End Function



#End Region



    End Class



End Namespace



A pozivas je ovako:

Code:

 Dim crc As New xous.Security.Cryptography.CRC32
        Dim fs As New FileStream(fl, FileMode.Open)
        Dim CRC32 As Integer = BitConverter.ToInt32(crc.ComputeHash(CType(fs, Stream)), 0)
        fs.Close()
        Dim crcresult As String = String.Format("{0:X8}", CRC32)


gde ti je fl recimo putanja do fajla...

nadam se da ce koristiti.

E sad ja sa ovim proveravam fajlove... i to lepo radi... mislim da bi trebalo nekako da dataset ili vec to sto imas memorijski pretvoris u fajl, hashujes ga zatim upises kod a promenljivu koja sadrzi fajl ubijes... i taj postupak ponavljas svaki put kada ti je ovo potrebno. Ne znam dali je hash direktno na dataset ili vec sta koristis moguc, tj dali uvek daje iste rezultate na razlicitim masinama i slicno...
***If there is a will, there is a way***
 
Odgovor na temu

[es] :: .NET :: Pitanje o hash-iranju objekta

[ Pregleda: 1568 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.