문제

가 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top