.NET/COM を使用せずに、Microsoft の暗号化サービス プロバイダー (CSP) を介して強力なランダム バイトを生成する方法はありますか? たとえば、コマンド ラインまたはその他の方法を使用しますか?
より具体的には、NodeJSで使用したいと思います。
.NET/COM を使用せずに、Microsoft の暗号化サービス プロバイダー (CSP) を介して強力なランダム バイトを生成する方法はありますか? たとえば、コマンド ラインまたはその他の方法を使用しますか?
より具体的には、NodeJSで使用したいと思います。
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)
はい、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;
}