| ||||
| ||||
пытаюсь зашифровать с помощью гост28147, однако при расшифровывании не удается получить открытый текст. [code] #define PROVIDER_NAME "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider" #define PROVIDER_TYPE 75 #define BUFF_SIZE 4096 #include <windows.h> #include <wincrypt.h> void main() { HCRYPTPROV hprov; HCRYPTKEY hsesskey; unsigned char data[BUFF_SIZE], data1[BUFF_SIZE]; unsigned long datalen; int i; if (CryptAcquireContext(&hprov,NULL,PROVIDER_NAME,PROVIDER_TYPE,CRYPT_VERIFYCONTEXT)==0) return 1; if (CryptGenKey(hprov,26142,0,&hsesskey)==0) return 1; datalen=8; data[0]='a'; data[1]='b'; data[2]='c'; data[3]='d'; data[4]='e'; data[5]='f'; data[6]='g'; data[7]='h'; strncpy(data1,data,8); if (CryptEncrypt(hsesskey,0,1,0,data,&datalen,BUFF_SIZE)==0) return 1; if (CryptDecrypt(hsesskey,0,1,0,data,&datalen)==0) return 1; CryptReleaseContext(hprov,0); for (i=0;i<8;i++) if (data[i]!=data1[i]) return 1; return 0; } [/code] | ||||
Ответы: | ||||
| ||||
Забыл уточнить, при работе с мс провайдером - код отрабатывает удачно. Думал, что дело в мешинге, сделал DuplicateKey перед процедурой шифрования и расшифровывал на дубликате ключе - та же фигня. | ||||
| ||||
http://www.cryptopro.ru/cryptopro/forum/view.asp?q=884 | ||||
| ||||
64oa1jp1g4q8 <a href = http://www.1083128.com/388971.html > 6bwsqv6wjrgf2 </a> [URL=http://www.393232.com/672392.html] szvx9f0u2sfacm7 [/URL] u7vv4hngsnp179w | ||||
| ||||
lhgbb9natmjy6 <a href = http://www.881753.com/992950.html > sm60va0s5u </a> [URL=http://www.573073.com/808291.html] rzhz9ub5ty [/URL] 06gno0mcv | ||||
| ||||
lhgbb9natmjy6 [URL=http://www.573073.com/808291.html] rzhz9ub5ty [/URL] 06gno0mcv | ||||
| ||||
64oa1jp1g4q8 [URL=http://www.393232.com/672392.html] szvx9f0u2sfacm7 [/URL] u7vv4hngsnp179w | ||||
| ||||
64oa1jp1g4q8 http://www.205423.com/296744.html u7vv4hngsnp179w | ||||
| ||||
lhgbb9natmjy6 http://www.639727.com/972095.html 06gno0mcv | ||||
| ||||
64oa1jp1g4q8 vxtw9rf40uheu51 u7vv4hngsnp179w | ||||
| ||||
lhgbb9natmjy6 vcfryxqr 06gno0mcv | ||||
| ||||
мда... Перед шифрованием сохраните IV - перед расшифрованием установите. Примерно так: HCRYPTPROV hprov; HCRYPTKEY hsesskey; unsigned char data[BUFF_SIZE], data1[BUFF_SIZE]; BYTE iv[8]; unsigned long datalen; int i; if (CryptAcquireContext(&hprov,NULL,NULL,PROVIDER_TYPE,CRYPT_VERIFYCONTEXT)==0) return 1; if (CryptGenKey(hprov,26142,0,&hsesskey)==0) return 1; datalen=8; CryptGetKeyParam(hsesskey, KP_IV, iv, &datalen, 0); data[0]='a'; data[1]='b'; data[2]='c'; data[3]='d'; data[4]='e'; data[5]='f'; data[6]='g'; data[7]='h'; strncpy((char*)data1,(char*)data,8); if (CryptEncrypt(hsesskey,0,1,0,(BYTE*)data,&datalen,BUFF_SIZE)==0) return 1; CryptSetKeyParam(hsesskey, KP_IV, iv, 0); if (CryptDecrypt(hsesskey,0,1,0,(BYTE*)data,&datalen)==0) return 1; CryptReleaseContext(hprov,0); for (i=0;i<8;i++) if (data[i]!=data1[i]) return 1; return 0; | ||||