Tillbaka till svenska Fidonet
English   Information   Debug  
TUB   0/290
UFO   0/40
UNIX   0/1316
USA_EURLINK   0/102
USR_MODEMS   0/1
VATICAN   0/2740
VIETNAM_VETS   0/14
VIRUS   0/378
VIRUS_INFO   0/201
VISUAL_BASIC   0/473
WHITEHOUSE   0/5187
WIN2000   0/101
WIN32   0/30
WIN95   0/4289
WIN95_OLD1   0/70272
WINDOWS   0/1517
WWB_SYSOP   0/419
WWB_TECH   0/810
ZCC-PUBLIC   0/1
ZEC   4

 
4DOS   0/134
ABORTION   0/7
ALASKA_CHAT   0/506
ALLFIX_FILE   0/1313
ALLFIX_FILE_OLD1   0/7997
ALT_DOS   0/152
AMATEUR_RADIO   0/1039
AMIGASALE   0/14
AMIGA   0/331
AMIGA_INT   0/1
AMIGA_PROG   0/20
AMIGA_SYSOP   0/26
ANIME   0/15
ARGUS   0/924
ASCII_ART   0/340
ASIAN_LINK   0/651
ASTRONOMY   0/417
AUDIO   0/92
AUTOMOBILE_RACING   0/105
BABYLON5   0/17862
BAG   135
BATPOWER   0/361
BBBS.ENGLISH   0/382
BBSLAW   0/109
BBS_ADS   0/5290
BBS_INTERNET   0/507
BIBLE   0/3563
BINKD   0/1119
BINKLEY   0/215
BLUEWAVE   0/2173
CABLE_MODEMS   0/25
CBM   0/46
CDRECORD   0/66
CDROM   0/20
CLASSIC_COMPUTER   0/378
COMICS   0/15
CONSPRCY   0/899
COOKING   33421
COOKING_OLD1   0/24719
COOKING_OLD2   0/40862
COOKING_OLD3   0/37489
COOKING_OLD4   0/35496
COOKING_OLD5   9370
C_ECHO   0/189
C_PLUSPLUS   0/31
DIRTY_DOZEN   0/201
DOORGAMES   0/2065
DOS_INTERNET   0/196
duplikat   6002
ECHOLIST   0/18295
EC_SUPPORT   0/318
ELECTRONICS   0/359
ELEKTRONIK.GER   1534
ENET.LINGUISTIC   0/13
ENET.POLITICS   0/4
ENET.SOFT   0/11701
ENET.SYSOP   33945
ENET.TALKS   0/32
ENGLISH_TUTOR   0/2000
EVOLUTION   0/1335
FDECHO   0/217
FDN_ANNOUNCE   0/7068
FIDONEWS   24159
FIDONEWS_OLD1   0/49742
FIDONEWS_OLD2   0/35949
FIDONEWS_OLD3   0/30874
FIDONEWS_OLD4   0/37224
FIDO_SYSOP   12852
FIDO_UTIL   0/180
FILEFIND   0/209
FILEGATE   0/212
FILM   0/18
FNEWS_PUBLISH   4436
FN_SYSOP   41706
FN_SYSOP_OLD1   71952
FTP_FIDO   0/2
FTSC_PUBLIC   0/13613
FUNNY   0/4886
GENEALOGY.EUR   0/71
GET_INFO   105
GOLDED   0/408
HAM   0/16074
HOLYSMOKE   0/6791
HOT_SITES   0/1
HTMLEDIT   0/71
HUB203   466
HUB_100   264
HUB_400   39
HUMOR   0/29
IC   0/2851
INTERNET   0/424
INTERUSER   0/3
IP_CONNECT   719
JAMNNTPD   0/233
JAMTLAND   0/47
KATTY_KORNER   0/41
LAN   0/16
LINUX-USER   0/19
LINUXHELP   0/1155
LINUX   0/22112
LINUX_BBS   0/957
mail   18.68
mail_fore_ok   249
MENSA   0/341
MODERATOR   0/102
MONTE   0/992
MOSCOW_OKLAHOMA   0/1245
MUFFIN   0/783
MUSIC   0/321
N203_STAT   930
N203_SYSCHAT   313
NET203   321
NET204   69
NET_DEV   0/10
NORD.ADMIN   0/101
NORD.CHAT   0/2572
NORD.FIDONET   189
NORD.HARDWARE   0/28
NORD.KULTUR   0/114
NORD.PROG   0/32
NORD.SOFTWARE   0/88
NORD.TEKNIK   0/58
NORD   0/453
OCCULT_CHAT   0/93
OS2BBS   0/787
OS2DOSBBS   0/580
OS2HW   0/42
OS2INET   0/37
OS2LAN   0/134
OS2PROG   0/36
OS2REXX   0/113
OS2USER-L   207
OS2   0/4786
OSDEBATE   0/18996
PASCAL   0/490
PERL   0/457
PHP   0/45
POINTS   0/405
POLITICS   0/29554
POL_INC   0/14731
PSION   103
R20_ADMIN   1123
R20_AMATORRADIO   0/2
R20_BEST_OF_FIDONET   13
R20_CHAT   0/893
R20_DEPP   0/3
R20_DEV   399
R20_ECHO2   1379
R20_ECHOPRES   0/35
R20_ESTAT   0/719
R20_FIDONETPROG...
...RAM.MYPOINT
  0/2
R20_FIDONETPROGRAM   0/22
R20_FIDONET   0/248
R20_FILEFIND   0/24
R20_FILEFOUND   0/22
R20_HIFI   0/3
R20_INFO2   3249
R20_INTERNET   0/12940
R20_INTRESSE   0/60
R20_INTR_KOM   0/99
R20_KANDIDAT.CHAT   42
R20_KANDIDAT   28
R20_KOM_DEV   112
R20_KONTROLL   0/13300
R20_KORSET   0/18
R20_LOKALTRAFIK   0/24
R20_MODERATOR   0/1852
R20_NC   76
R20_NET200   245
R20_NETWORK.OTH...
...ERNETS
  0/13
R20_OPERATIVSYS...
...TEM.LINUX
  0/44
R20_PROGRAMVAROR   0/1
R20_REC2NEC   534
R20_SFOSM   0/341
R20_SF   0/108
R20_SPRAK.ENGLISH   0/1
R20_SQUISH   107
R20_TEST   2
R20_WORST_OF_FIDONET   12
RAR   0/9
RA_MULTI   106
RA_UTIL   0/162
REGCON.EUR   0/2056
REGCON   0/13
SCIENCE   0/1206
SF   0/239
SHAREWARE_SUPPORT   0/5146
SHAREWRE   0/14
SIMPSONS   0/169
STATS_OLD1   0/2539.065
STATS_OLD2   0/2530
STATS_OLD3   0/2395.095
STATS_OLD4   0/1692.25
SURVIVOR   0/495
SYSOPS_CORNER   0/3
SYSOP   0/84
TAGLINES   0/112
TEAMOS2   0/4530
TECH   0/2617
TEST.444   0/105
TRAPDOOR   0/19
TREK   0/755
Möte VISUAL_BASIC, 473 texter
 lista första sista föregående nästa
Text 332, 338 rader
Skriven 2005-03-12 08:58:00 av "elef" <m.P.B@*toglimi*ro (1:278/230)
Ärende: Re: Beginner JPG header question
========================================



"John" <jtk93063-nrvbmisc01@KILLSPAM.com> ha scritto nel messaggio
news:Xns960B9AE2DD244Valhalla@64.164.98.7...
> "Elef" <m.p.b@*toglimi*rocketmail.com> wrote in
> news:hHFUd.72278$2h5.37963@tornado.fastwebnet.it:
>
>>
>> "Jason Keats" <jkeats@melbpcDeleteThis.org.au> ha scritto
>> nel messaggio news:cvv001$f8v$1@possum.melbpc.org.au...
>>> John wrote:
>>>> John <jtk93063-nrvbmisc01@KILLSPAM.com> wrote in
>>>> news:Xns960A8ADFC5F3DValhalla@64.164.98.6:
>>>>
>>>>> Hello Group,
>>>>>
>>>>> I posted in the other VB group and it was quite a long
>>>>> post so I don't think anyone will answer it LOL.
>>>>>
>>>>> However, it seems I'm finding a bit of information on my
>>>>> own. The really BIG hurdle I have is this.
>>>>>
>>>>> I am going to a site (or several sites) that post a .jpg
>>>>> file. Sometimes the update it quite regularly, sometimes
>>>>> it stays out there for a day or so.
>>>>>
>>>>> What I would like to do, exclusive of checking the
>>>>> regular file name (say, XYZ.JPG), is to be able to
>>>>> examine the JPG header to see if it is the same picture
>>>>> as downloaded before, or if it is different.
>>>>>
>>>>> I am assuming that internally, the jpg file might store
>>>>> it's original file name, or some other identification
>>>>> exclusive that that individual picture.
>>>>>
>>>>> I've been Googling until my head hurts, and can't seem
>>>>> to find the information I need. It seems there was
>>>>> something out there in the 1992 to 1998 time frame, but
>>>>> now it is not available. (I'm not sure if it was an ocx,
>>>>> dll or what.)
>>>>>
>>>>> Anyway, does ANYONE know of a snippet or source
>>>>> available on the web, or here for posting, where a
>>>>> beginner can get information such as described above?
>>>>>
>>>>> Or perhaps someone may have another suggestion? (I
>>>>> already have a procedure I'm working on where I compare
>>>>> the filename and size. But this seems more academic,
>>>>> because after I save the file on my HD it's got the
>>>>> current time stamp and not the original one ... and the
>>>>> user always posts the jpg file name with the same
>>>>> prefix, i.e. XYZ for XYZ.JPG. So I'm more or less just
>>>>> chasing in circles on this).
>>>>>
>>>>> TIA for any ideas, snippets, links to code, etc.
>>>>>
>>>>>
>>>>>
>>>>
>>>> Oh, now this is what happens when I post something while
>>>> on pain meds for my back LOL!
>>>>
>>>> I forgot to mention, he more often than not has a TEXT
>>>> box in the JPG which states the time, date, and some
>>>> other information, when he compiled the chart. Perhaps
>>>> there is a way to search for the text box and read the
>>>> text itself, as a string, and compare it to the previous
>>>> JPG that was posted?
>>>>
>>>> OK, that's it ... sorry for the add-on post.
>>>
>>> Information on the JPEG file format is available at:
>>>
>>> http://www.wotsit.org/search.asp?page=5&s=graphics
>>>
>>> Text within a picture is not accessible without using OCR.
>>>  Good luck with that!
>>>
>>> I'm assuming you already know how to download webpages,
>>> etc.
>>>
>>>
>>
>> Fully agree with Jason. You may assume as the original name
>> of the jpg is its MD5 hash. This way you'll be able to
>> identify two identical images even if they are named
>> differentely. You can find plenty MD5 hashing routines for
>> VB on the web. Hope it helps
>> Marco
>>
>>
>
> Thanks Marco!
>
> Whew. I've never worked with Crypto or digital signatures.
>
> I've found a few resources on the Web and it seems fairly
> straight forward though. So I'm just looking for a source code
> example.
>
> Seems what I have to do is:
>    When I save the first file, give it a unique file name
>        (I'm thinking of giving it a date/time name)
>    Get the digital signature of the first file
>    Download the new file and save with date/time filename
>    Calculate the digital signature of the new file
>    Compare the two
>        If equal, delete the new file else keep it
>
> Simple. Just have to figure out the MD5 hash LOL.
>
> Thanks again to both of you, Jason and Marco. This looks like
> it's gonna be fun :)
>
> --
>
> John Kalenda
> Simi Valley, CA
> ------------------
> to reply, replace KILLSPAM with yahoo

>>>
>>
>> Fully agree with Jason. You may assume as the original name
>> of the jpg is its MD5 hash. This way you'll be able to
>> identify two identical images even if they are named
>> differentely. You can find plenty MD5 hashing routines for
>> VB on the web. Hope it helps
>> Marco
>>
>>
>
> Thanks Marco!
....
> Simple. Just have to figure out the MD5 hash LOL.
>
Here is the code i use to hash a file:

Option Explicit

Private Declare Function CryptAcquireContext Lib "advapi32.dll" _
   Alias "CryptAcquireContextA" ( _
   ByRef phProv As Long, _
   ByVal pszContainer As String, _
   ByVal pszProvider As String, _
   ByVal dwProvType As Long, _
   ByVal dwFlags As Long) As Long

Private Declare Function CryptReleaseContext Lib "advapi32.dll" ( _
   ByVal hProv As Long, _
   ByVal dwFlags As Long) As Long

Private Declare Function CryptCreateHash Lib "advapi32.dll" ( _
   ByVal hProv As Long, _
   ByVal Algid As Long, _
   ByVal hKey As Long, _
   ByVal dwFlags As Long, _
   ByRef phHash As Long) As Long

Private Declare Function CryptDestroyHash Lib "advapi32.dll" ( _
   ByVal hHash As Long) As Long

Private Declare Function CryptHashData Lib "advapi32.dll" ( _
   ByVal hHash As Long, _
   pbData As Byte, _
   ByVal dwDataLen As Long, _
   ByVal dwFlags As Long) As Long

Private Declare Function CryptGetHashParam Lib "advapi32.dll" ( _
   ByVal hHash As Long, _
   ByVal dwParam As Long, _
   pbData As Any, _
   pdwDataLen As Long, _
   ByVal dwFlags As Long) As Long

Private Const PROV_RSA_FULL = 1

Private Const CRYPT_NEWKEYSET = &H8

Private Const ALG_CLASS_HASH = 32768

Private Const ALG_TYPE_ANY = 0

Private Const ALG_SID_MD2 = 1
Private Const ALG_SID_MD4 = 2
Private Const ALG_SID_MD5 = 3
Private Const ALG_SID_SHA1 = 4

Enum HashAlgorithm
   MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
   MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
   MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
   SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
End Enum

Private Const HP_HASHVAL = 2
Private Const HP_HASHSIZE = 4

Function HashFile( _
   ByVal Filename As String, _
   Optional ByVal Algorithm As HashAlgorithm = MD5) As String

    Dim hCtx As Long
    Dim hHash As Long
    Dim lFile As Long
    Dim lRes As Long
    Dim lLen As Long
    Dim lIdx As Long
    Dim abHash() As Byte

   ' Check if the file exists (not the best method BTW!)
   If Len(Dir$(Filename)) = 0 Then Err.Raise 53

   ' Get default provider context handle
   lRes = CryptAcquireContext(hCtx, vbNullString, _
           vbNullString, PROV_RSA_FULL, 0)

   If lRes = 0 And Err.LastDllError = &H80090016 Then

      ' There's no default keyset container!!!
      ' Get the provider context and create
      ' a default keyset container
      lRes = CryptAcquireContext(hCtx, vbNullString, _
               vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET)
   End If

   If lRes <> 0 Then

      ' Create the hash
      lRes = CryptCreateHash(hCtx, Algorithm, 0, 0, hHash)

      If lRes <> 0 Then

         ' Get a file handle
         lFile = FreeFile

         ' Open the file
         Open Filename For Binary As lFile

         If Err.Number = 0 Then

            Const BLOCK_SIZE As Long = 32 * 1024& ' 32K
            ReDim abBlock(1 To BLOCK_SIZE) As Byte
            Dim lCount As Long
            Dim lBlocks As Long
            Dim lLastBlock As Long

            ' Calculate how many full blocks
            ' the file contains
            lBlocks = LOF(lFile) \ BLOCK_SIZE

            ' Calculate the remaining data length
            lLastBlock = LOF(lFile) - lBlocks * BLOCK_SIZE

            ' Hash the blocks
            For lCount = 1 To lBlocks

               Get lFile, , abBlock

               ' Add the chunk to the hash
               lRes = CryptHashData(hHash, abBlock(1), BLOCK_SIZE, 0)

               ' Stop the loop if CryptHashData fails
               If lRes = 0 Then Exit For

            Next

            ' Is there more data?
            If lLastBlock > 0 And lRes <> 0 Then

               ' Get the last block
               ReDim abBlock(1 To lLastBlock) As Byte
               Get lFile, , abBlock

               ' Hash the last block
               lRes = CryptHashData(hHash, abBlock(1), lLastBlock, 0)

            End If

            ' Close the file
            Close lFile

         End If

         If lRes <> 0 Then

            ' Get the hash lenght
            lRes = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)

            If lRes <> 0 Then

                ' Initialize the buffer
                ReDim abHash(0 To lLen - 1)

                ' Get the hash value
                lRes = CryptGetHashParam(hHash, HP_HASHVAL, abHash(0), lLen,
0)

                If lRes <> 0 Then

                    ' Convert value to hex string
                    For lIdx = 0 To UBound(abHash)
                        HashFile = HashFile & _
                                     Right$("0" & Hex$(abHash(lIdx)), 2)
                    Next

                End If

            End If

         End If

         ' Release the hash handle
         CryptDestroyHash hHash

      End If

   End If

   ' Release the provider context
   CryptReleaseContext hCtx, 0

   ' Raise an error if lRes = 0
   If lRes = 0 Then Err.Raise Err.LastDllError

End Function



Bye
Elef




--- UseNet To RIME Gateway @ 3/12/05 8:56:38 AM ---
 * Origin: MoonDog BBS, Brooklyn,NY, 718 692-2498, 1:278/230 (1:278/230)