03.12.2007 12:32:25гост28147 Ответов: 11
Александр
пытаюсь зашифровать с помощью гост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]
 
Ответы:
03.12.2007 12:36:14Александр
Забыл уточнить, при работе с мс провайдером - код отрабатывает удачно.
Думал, что дело в мешинге, сделал DuplicateKey перед процедурой шифрования и расшифровывал на дубликате ключе - та же фигня.
03.12.2007 14:12:26Kirill Sobolev
http://www.cryptopro.ru/cryptopro/forum/view.asp?q=884
04.12.2007 0:29:41suqxfihr3x
64oa1jp1g4q8 <a href = http://www.1083128.com/388971.html > 6bwsqv6wjrgf2 </a> [URL=http://www.393232.com/672392.html] szvx9f0u2sfacm7 [/URL] u7vv4hngsnp179w
04.12.2007 0:29:43b7yirjte5b
lhgbb9natmjy6 <a href = http://www.881753.com/992950.html > sm60va0s5u </a> [URL=http://www.573073.com/808291.html] rzhz9ub5ty [/URL] 06gno0mcv
04.12.2007 0:29:49b7yirjte5b
lhgbb9natmjy6 [URL=http://www.573073.com/808291.html] rzhz9ub5ty [/URL] 06gno0mcv
04.12.2007 0:29:50suqxfihr3x
64oa1jp1g4q8 [URL=http://www.393232.com/672392.html] szvx9f0u2sfacm7 [/URL] u7vv4hngsnp179w
04.12.2007 0:29:56suqxfihr3x
64oa1jp1g4q8 http://www.205423.com/296744.html u7vv4hngsnp179w
04.12.2007 0:29:57b7yirjte5b
lhgbb9natmjy6 http://www.639727.com/972095.html 06gno0mcv
04.12.2007 0:30:02suqxfihr3x
64oa1jp1g4q8 vxtw9rf40uheu51 u7vv4hngsnp179w
04.12.2007 0:30:08b7yirjte5b
lhgbb9natmjy6 vcfryxqr 06gno0mcv
05.12.2007 1:39:25maxdm
мда...
Перед шифрованием сохраните 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;