Проблема с ключами.
От: MuzOboz Россия  
Дата: 13.10.03 06:44
Оценка:
Заранее прошу прощенья, если не совсем в тот форум...
Проблема с цифрофой подписью (DSA). Клиент на VC++, сервер на JAVA.
Посредством CryptoAPI создаем ключи и экспортируем public key: (проверки пропущены)
    HCRYPTPROV    hProvd = 0;
    HCRYPTKEY hKey = 0;
    DWORD dwBlobLen = 0;
    PBYTE    pbKeyBlob = NULL;
    FILE *hDestination;
 
    // активизация криптопровайдера
  CryptAcquireContext(&hProvd, NULL, "Microsoft Base DSS Cryptographic Provider",
                  PROV_DSS, 0); 
 if(lastError == NTE_BAD_KEYSET){
    CryptAcquireContext(&hProv, NULL, "Microsoft Base DSS Cryptographic Provider",
        PROV_DSS, CRYPT_NEWKEYSET);

 //showError(GetLastError());
 // генерация ключа
  res = CryptGenKey(hProvd, CALG_DSS_SIGN, CRYPT_EXPORTABLE, &hKey );
 // создание public ключа
  res = CryptGetUserKey(hProvd, AT_SIGNATURE, &hKey);
 // экспортирование ключа
  res = CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen);
  pbKeyBlob = new BYTE[dwBlobLen];
  res = CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen);
  // --- сохранение ключа в файле
  hDestination = fopen("c:\\publicKey.key", "wb");
  fwrite(pbKeyBlob, 1, dwBlobLen, hDestination);
  fclose(hDestination);

  delete[]pbKeyBlob;

Затем из кода JAVA пытаюсь загрузить этот ключ:
    byte[] key = null;
    PublicKey publicKey = null;
    try{
    // readKeyFromFile - читает из файла и возвращает его содержимое в виде byte[]
        if( (key = readKeyFromFile("с:/publicKey.key")) != null )  
            publicKey = new DSAPublicKey(key);

        }catch(Exception ex){
            System.err.println("Error [readPublicKey]: " + ex.toString());
        }

В результате получаю:
java.security.InvalidKeyException: invalid key format
Может кто сталкивался с такой проблемой?
Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.