0

.NET/COM を使用せずに、Microsoft の暗号化サービス プロバイダー (CSP) を介して強力なランダム バイトを生成する方法はありますか? たとえば、コマンド ラインまたはその他の方法を使用しますか?

より具体的には、NodeJSで使用したいと思います。

4

2 に答える 2

1

http://technet.microsoft.com/en-us/library/cc733055(v=ws.10).aspxを参照してください。

netsh nap client set csp name = <name> keylength = <keylength>

このコマンドが機能する場合は、nodejs を介して実行するだけです。(require('child_process').exec)

于 2012-11-05T19:09:30.687 に答える
1

はい、Windows API を使用します。サンプル C++ コードは次のとおりです。

#include "Wincrypt.h"

// ==========================================================================
HCRYPTPROV hCryptProv= NULL; // handle for a cryptographic provider context

// ==========================================================================
void DoneCrypt()
{
    ::CryptReleaseContext(hCryptProv, 0);
    hCryptProv= NULL;
}

// --------------------------------------------------------------------------
// acquire crypto context and a key ccontainer
bool InitCrypt()
{
    if (hCryptProv) // already initialized
        return true;

    if (::CryptAcquireContext(&hCryptProv        ,   // handle to the CSP
                              NULL               ,   // container name
                              NULL               ,   // use the default provider
                              PROV_RSA_FULL      ,   // provider type
                              CRYPT_VERIFYCONTEXT )) // flag values
    {
        atexit(DoneCrypt);
        return true;
    }

    REPORT(REP_ERROR, _T("CryptAcquireContext failed"));
    return false;
}

// --------------------------------------------------------------------------
// fill buffer with random data
bool RandomBuf(BYTE* pBuf, size_t nLen)
{
    if (!hCryptProv)
        if (!InitCrypt())
            return false;

    size_t nIndex= 0;

    while (nLen-nIndex)
    {
        DWORD nCount= (nLen-nIndex > (DWORD)-1) ? (DWORD)-1 : (DWORD)(nLen-nIndex);
        if (!::CryptGenRandom(hCryptProv, nCount, &pBuf[nIndex]))
        {
            REPORT(REP_ERROR, _T("CryptGenRandom failed"));
            return false;
        }

        nIndex+= nCount;
    }

    return true;
}
于 2012-11-10T17:16:53.427 に答える