Advapi32 Dll Cryptdecryptmessage 4,9/5 5540votes
BOOL WINAPI CryptGenRandom( _In_ HCRYPTPROV hProv, _In_ DWORD dwLen, _Inout_ BYTE *pbBuffer ); Parameters hProv [in] Handle of a (CSP) created by a call to. DwLen [in] Number of bytes of random data to be generated. PbBuffer [in, out] Buffer to receive the returned data.
This buffer must be at least dwLen bytes in length. Optionally, the application can fill this buffer with data to use as an auxiliary random seed. Return value If the function succeeds, the return value is nonzero (TRUE). If the function fails, the return value is zero (FALSE). For extended error information, call. The error codes prefaced by 'NTE' are generated by the particular CSP being used. Some possible error codes are listed in the following table.
Customizes various aspects of a session key's operations. The CryptGenRandom function fills a buffer with cryptographically random bytes.
Return code Description ERROR_INVALID_HANDLE One of the parameters specifies a handle that is not valid. ERROR_INVALID_PARAMETER One of the parameters contains a value that is not valid.
This is most often a pointer that is not valid. NTE_BAD_UID The hProv parameter does not contain a valid context handle.
NTE_FAIL The function failed in some unexpected way. Remarks The data produced by this function is cryptographically random. It is far more random than the data generated by the typical random number generator such as the one shipped with your C compiler. This function is often used to generate random and. Software random number generators work in fundamentally the same way. They start with a random number, known as the seed, and then use an algorithm to generate a pseudo-random sequence of bits based on it.
The most difficult part of this process is to get a seed that is truly random. This is usually based on user input latency, or the jitter from one or more hardware components. American Horizons Schaller Pdf Creator on this page.
With Microsoft CSPs, CryptGenRandom uses the same random number generator used by other security components. This allows numerous processes to contribute to a system-wide seed. CryptoAPI stores an intermediate random seed with every user. To form the seed for the random number generator, a calling application supplies bits it might have—for instance, mouse or keyboard timing input—that are then combined with both the stored seed and various system data and user data such as the process ID and thread ID, the system clock, the system time, the system counter, memory status, free disk clusters, the hashed user environment block. This result is used to seed the pseudorandom number generator (PRNG).
In Windows Vista with Service Pack 1 (SP1) and later, an implementation of the AES counter-mode based PRNG specified in NIST Special Publication 800-90 is used. In Windows Vista, Windows Storage Server 2003, and Windows XP, the PRNG specified in Federal Information Processing Standard (FIPS) 186-2 is used. If an application has access to a good random source, it can fill the pbBuffer buffer with some random data before calling CryptGenRandom.
The CSP then uses this data to further randomize its internal seed. It is acceptable to omit the step of initializing the pbBuffer buffer before calling CryptGenRandom.
Examples The following example shows the generation of 8 random bytes. These can be used to create cryptographic keys or for any application that uses random numbers. For an example that includes the complete context for this example, see.
NTSTATUS RtlDecryptMemory( _Inout_ PVOID Memory, _In_ ULONG MemoryLength, _In_ ULONG OptionFlags ); Parameters Memory [in, out] A pointer to the memory to encrypt. The size of the memory must be a multiple of the RTL_ENCRYPT_MEMORY_SIZE constant. MemoryLength [in] Number of bytes to which Memory points. The number of bytes must be a multiple of the RTL_ENCRYPT_MEMORY_SIZE constant. OptionFlags [in] Value that specifies how the encryption works over process boundaries and impersonation.
This parameter can be one of the following values. The values are mutually exclusive. You must specify the same flag when encrypting and decrypting the memory.
Value Meaning 0 Encrypt and decrypt memory in the same process. An application running in a different process will not be able to decrypt the data. RTL_ENCRYPT_OPTION_CROSS_PROCESS Encrypt and decrypt memory in different processes. An application running in a different process will be able to decrypt the data. RTL_ENCRYPT_OPTION_SAME_LOGON Use the same logon credentials to encrypt and decrypt memory in different processes.
An application running in a different process will be able to decrypt the data. However, the process must run as the same user that encrypted the data and in the same logon session. Return value If the function is successful, the return value is STATUS_SUCCESS. If the function fails, the return value is an NTSTATUS code that indicates the error. Requirements Minimum supported client Windows XP, Windows XP [desktop apps only] Minimum supported server Windows Server 2003, Windows Server 2003 [desktop apps only] Header Ntsecapi.h DLL Advapi32.dll.