veria
چهارشنبه 19 مرداد 1384, 20:55 عصر
لطفا به من بگید که چه اشکالی در کد زیر وجود داره که در بعضی شرایط (که ویژگی اون شرایط برای من قابل تشخیص نیست) در encrypt کردن داده ها بر به این مشکل می خوره که فقط بخشی از داده ها (از ابتدای اونها) را encrypt میکنه. این مساله در نظر اول به نظر می رسه که مربوط به حجم داده ها نباشه چون با تغییر کاراکتری از کاراکترهای ورودی که encryption از اونجا به بعد قطع میشه بعضا تا 20-30 کاراکتر به تعداد کاراکترهای encrypt شده اضافه می شه.
پارامتر اول کلید عمومی- پارامتر دوم رشته کاراکترها که به عنوان ورودی و خروجی استفاده میشه - پارامتر سوم 0 برای hashing و 1 برای encryption و 2 برای decryption
CryptMe proc uses esi edi lpstring1: DWORD,lpstring2: DWORD,flag: DWORD
LOCAL hCryptProv:HCRYPTPROV
LOCAL hHash :HCRYPTHASH
LOCAL hCryptKey :HCRYPTKEY
LOCAL dwLength : DWORD
LOCAL sHash[512]:BYTE
invoke CryptAcquireContext,ADDR hCryptProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCON TEXT
.IF eax!=0
invoke CryptCreateHash,hCryptProv,CALG_MD5,0,0,ADDR hHash
.IF eax!=0
invoke lstrlen,lpstring1
mov dwLength,eax
invoke CryptHashData,hHash,lpstring1,dwLength,0
.IF eax!=0
.IF flag==0
mov dwLength,SIZEOF sHash
invoke CryptGetHashParam,hHash,HP_HASHVAL,ADDR sHash,ADDR dwLength,0
.IF eax!=0
invoke ByteToStr,dwLength,ADDR sHash,lpstring2
invoke CryptDestroyHash,hHash
.ENDIF
.ELSE
invoke CryptDeriveKey,hCryptProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, ADDR hCryptKey
.IF eax!=0
invoke CryptDestroyHash,hHash
invoke lstrlen,lpstring2
mov dwLength,eax
.IF flag==1
invoke CryptEncrypt,hCryptKey,0,TRUE,0,lpstring2,ADDR dwLength, dwLength
.ELSE
invoke CryptDecrypt,hCryptKey,0,TRUE,0,lpstring2,ADDR dwLength
.ENDIF
invoke CryptDestroyKey,hCryptKey
.ENDIF
.ENDIF
invoke CryptReleaseContext,hCryptProv,0
.ENDIF
.ENDIF
.ENDIF
ret
CryptMe endp
پارامتر اول کلید عمومی- پارامتر دوم رشته کاراکترها که به عنوان ورودی و خروجی استفاده میشه - پارامتر سوم 0 برای hashing و 1 برای encryption و 2 برای decryption
CryptMe proc uses esi edi lpstring1: DWORD,lpstring2: DWORD,flag: DWORD
LOCAL hCryptProv:HCRYPTPROV
LOCAL hHash :HCRYPTHASH
LOCAL hCryptKey :HCRYPTKEY
LOCAL dwLength : DWORD
LOCAL sHash[512]:BYTE
invoke CryptAcquireContext,ADDR hCryptProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCON TEXT
.IF eax!=0
invoke CryptCreateHash,hCryptProv,CALG_MD5,0,0,ADDR hHash
.IF eax!=0
invoke lstrlen,lpstring1
mov dwLength,eax
invoke CryptHashData,hHash,lpstring1,dwLength,0
.IF eax!=0
.IF flag==0
mov dwLength,SIZEOF sHash
invoke CryptGetHashParam,hHash,HP_HASHVAL,ADDR sHash,ADDR dwLength,0
.IF eax!=0
invoke ByteToStr,dwLength,ADDR sHash,lpstring2
invoke CryptDestroyHash,hHash
.ENDIF
.ELSE
invoke CryptDeriveKey,hCryptProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, ADDR hCryptKey
.IF eax!=0
invoke CryptDestroyHash,hHash
invoke lstrlen,lpstring2
mov dwLength,eax
.IF flag==1
invoke CryptEncrypt,hCryptKey,0,TRUE,0,lpstring2,ADDR dwLength, dwLength
.ELSE
invoke CryptDecrypt,hCryptKey,0,TRUE,0,lpstring2,ADDR dwLength
.ENDIF
invoke CryptDestroyKey,hCryptKey
.ENDIF
.ENDIF
invoke CryptReleaseContext,hCryptProv,0
.ENDIF
.ENDIF
.ENDIF
ret
CryptMe endp