什么加密随机生成器C代码可以在WP8.1上使用
What crypto random generator C code could use on WP8.1?
我已经获取了一些C代码,并在通用应用程序的C++WinRT组件中进行了编译。然后,我根据手册1、2编写了一个C++包装类,将C代码的功能公开给我的C#通用商店项目。
适用于项目的Windows 8.1部分,但无法在Windows Phone 8.1上加载组件,仅表示"The specified module could not be found"
。我发现问题是C代码使用了以下随机生成器函数:
# define RtlGenRandom SystemFunction036
# if defined(__cplusplus)
extern "C"
# endif
BOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength);
# pragma comment(lib, "advapi32.lib")
这在WP8.1上似乎不可用。
这个MSDN页面建议我们应该使用CryptGenRandom
,但后者驻留在Wincrypt.h
中,这在WP8.1上不可用。
那么,我们可以使用C代码中的哪个随机生成器呢?
使用WinRT Windows::Security::Cryptography[C++]API。CryptographicBuffer.GenerateRandom将执行所需的
我想要一些不涉及从C调用C++/CX代码的东西,但到目前为止一无所获。所以,下面是我目前使用的解决方案。
// C++/CX
using namespace Platform;
using namespace Windows::Security::Cryptography;
using namespace Windows::Storage::Streams;
extern "C" void GenerateRandomBytes(unsigned char *bytes, unsigned int length)
{
IBuffer^ buffer = CryptographicBuffer::GenerateRandom(length);
DataReader^ reader = DataReader::FromBuffer(buffer);
reader->ReadBytes(ArrayReference<unsigned char>(bytes, buffer->Length));
}
// C
#ifdef RtlGenRandom
RtlGenRandom((PVOID) buf, (ULONG) size);
#else
GenerateRandomBytes((unsigned char*)buf, (unsigned int)size);
#endif
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 从cocos2d-x wp8-xaml中的c++代码中调用c#delegate
- 什么加密随机生成器C代码可以在WP8.1上使用