Статус: Участник
Группы: Участники
Зарегистрирован: 27.09.2016(UTC) Сообщений: 16 Откуда: Краснодар Поблагодарили: 4 раз в 1 постах
|
Модераторы, перенес тему в ветку 3.9. Но на эту тему кинул пару ссылок в личке, если можно,не удаляйте сразу. Получена ASN-структура следующего вида Далее пробую импортировать сессионный ключ следующим образом: Код:
Win32Check(CryptAcquireContext(@hProv, 'KeyContainer', '', 75, CRYPT_SILENT));
Win32Check(CryptGetUserKey(hProv, AT_KEYEXCHANGE, @FPrivateKey));
// сборка PublicKey BLOB из статической части и открытого ключа
abPublicKeyBlob :=
[
$06, // bType = PUBLICKEYBLOB
$20, // bVersion = 0x20
$00, $00,
$23, $2E, $00, $00, // KeyAlg = ALG_SID_GR3410EL
$4D, $41, $47, $31, //Magic = GR3410_1_MAGIC
$00, $02, $00, $00, // BitLen = 512
// bASN1GostR3410_94_PublicKeyParameters
$30, $12,
$06, $07 ,
$2A, $85, $03, $02, $02, $24, $00,
$06, $07,
$2A, $85, $03, $02, $02, $1E, $01,
// APublicKey;
$13, $1D, $94, $D3, $35, $01, $D3, $15,
$18, $10, $63, $7F, $D1, $CD, $AE, $8E,
$91, $A6, $DF, $60, $29, $64, $27, $9B,
$A1, $2E, $8D, $33, $61, $DF, $68, $AE,
$32, $B6, $87, $64, $2C, $8C, $97, $34,
$85, $94, $15, $5F, $7C, $D2, $3A, $84,
$21, $D4, $04, $3C, $99, $7A, $CF, $1A,
$99, $3A, $64, $21, $31, $7E, $F9, $77
];
// получение ключа согласования импортом открытого ключа отправителя
// на закрытом ключе
Win32Check(CryptImportKey(hProv, @abPublicKeyBlob[0], Length(abPublicKeyBlob), FPrivateKey, 0, @FAgreeKey));
// установление PRO_EXPORT алгоритма ключа согласования
algProExport := CALG_PRO_EXPORT;
Win32Check(CryptSetKeyParam(FAgreeKey, KP_ALGID, @algProExport, 0));
// сборка SessionKey BLOB из статической части и параметров сессионного ключа
abSessionKeyBlob :=
[
$01, // bType = SIMPLEBLOB
$20, // bVersion = 0x20
$00,$00 ,
$1E,$66 ,$00 ,$00, // KeyAlg = CALG_G28147
$FD,$51 ,$4A ,$37, // Magic = G28147_MAGIC
$1E,$66 ,$00 ,$00, // EncryptKeyAlgId = CALG_G28147
//ASessionSV
$CE, $F5, $56, $67, $BF, $BB, $15, $D2,
//ASessionKey ,
$31, $FD, $E9, $C5, $D3, $9A, $27, $46,
$FF, $EB, $87, $9C, $B4, $7D, $68, $D4,
$14, $77, $E6, $78, $DE, $D6, $E5, $FD,
$FF, $08, $9A, $86, $82, $72, $E7, $2D,
//ASessionMAC ,
$9A, $5B, $67, $B7,
// ASN.1 Sequence + OID Header
$30 ,$09 ,$06 ,$07,
// OID_GOST_R28147_89_CryptoPro_A_ParamSet 1.2.643.2.2.31.1
$2A ,$85 ,$03 ,$02 ,$02 ,$1F ,$01
];
// получение сессионного ключа импортом зашифрованного сессионного ключа
// на ключе согласования
Win32Check(CryptImportKey(hProv, @abSessionKeyBlob[0], Length(FSessionKeyBlob), FAgreeKey, CRYPT_EXPORTABLE, @FSessionKey));
На последнем вызове возникает ошибка "Плохие данные". В чем может быть проблема? Отредактировано пользователем 3 июля 2018 г. 19:06:52(UTC)
| Причина: Не указана
|