나는 P&G—은 어떻게 사용하 Wincrypt API 를 생성하 Diffie-Hellman 키 쌍?
-
09-06-2019 - |
문제
가 MSDN 문서 기, 지만,나는 못하고 아주 멀리:
p = 139;
g = 5;
CRYPT_DATA_BLOB pblob;
pblob.cbData = sizeof( ULONG );
pblob.pbData = ( LPBYTE ) &p;
CRYPT_DATA_BLOB gblob;
gblob.cbData = sizeof( ULONG );
gblob.pbData = ( LPBYTE ) &g;
HCRYPTKEY hKey;
if ( ::CryptGenKey( m_hCryptoProvider, CALG_DH_SF,
CRYPT_PREGEN, &hKey ) )
{
::CryptSetKeyParam( hKey, KP_P, ( LPBYTE ) &pblob, 0 );
실패기 NTE_BAD_DATA
.내가 사용하는 MS_DEF_DSS_DH_PROV
.어떤 장점이 있나요?
해결책
그것이 될 수 있는 그냥 좋아하지 않는 매우 짧은 키 사용.
내가 발견 데스크톱 버전의 기사 는 것이 도움이 될 수 있습니다,그것은 예입니다.
편집:
OP 깨달에서 예를 들어,당신에게 말해야 CryptGenKey 얼마나 키가,당신을 설정하여 상위 16 비트 플래그 비트 수를 당신이 사용하고 싶습니다.이는 0 으로,당신은 기본 키의 길이입니다.이 가 문서에서 설명 비고 섹션 장치의 설명서를,그리고 dwFlags 에서 매개 변수 데스크탑 문서.
에 대한 Diffie-Hellman 키 교환 알고리즘,기본 제공자의 기본값은 512 조금 키와 향상된 업체(기본값)기본값으로 1024 바이트 키,Windows XP and later.거기에있을 것 같지 않는 모든 문서에 대한 기본 길이에요합니다.
코드해야 합:
BYTE p[64] = { 139 }; // little-endian, all other bytes set to 0
BYTE g[64] = { 5 };
CRYPT_DATA_BLOB pblob;
pblob.cbData = sizeof( p);
pblob.pbData = p;
CRYPT_DATA_BLOB gblob;
gblob.cbData = sizeof( g );
gblob.pbData = g;
HCRYPTKEY hKey;
if ( ::CryptGenKey( m_hCryptoProvider, CALG_DH_SF,
( 512 << 16 ) | CRYPT_PREGEN, &hKey ) )
{
::CryptSetKeyParam( hKey, KP_P, ( LPBYTE ) &pblob, 0 );
다른 팁
그것은 나에게 보인 KP_P
, KP_G
, KP_Q
는 DSS 키(디지털 서명 기준?).에 대한 Diffie-Hellman 처럼 당신이 사용하는 KP_PUB_PARAMS
고 전달 DATA_BLOB
는 지점을 DHPUBKEY_VER3
구조입니다.
참고 문서 당신을 가리키는 것에서 윈도우 모바일/Windows CE SDK.지 않는 것이 첫 번째 시간 CE 일 다르게 바탕 화면에서/server.
편집:CE 을 구현하지 않습 KP_PUB_PARAMS
.사용하는 이 구조,바탕 화면에서 볼 Diffie-Hellman 버전 3 공개 키 Blob.