Intel 第三代CPU酷睿处理器内置硬件随机数的获取方法
2014-09-12 15:28
399 查看
Intel在IVB架构的第三代CPU酷睿处理器(2012年开始生产)内置了一个利用电阻热噪声取得硬件真随机数的功能。
关于真随机数和伪随机数的区别,以及世上是否存在真随机数等哲学争论不在本文讨论范围。
下面给出delphi代码,一共4个函数,具体使用的是两个函数:
RdRand_isSupported 判断当前cpu是否支持该功能,
rdrand_16 取得16位随机数到aex寄存器,如果要取32位或者64位的随机数,请自行参考intel开发手册修改相应的指令。另外该函数内没有判断cpu是否支持该指令,所以请在程序开始阶段或者其他相应地方调用RdRand_isSupported来判断cpu是否支持该功能。
function GetCpuId(): UINT;
var
bException: BOOL;
//szCpu: array [0 .. 15] of BYTE;
uCpuID: UINT;
begin
Result := 0;
// ZeroMemory(@szCpu, sizeof(szCpu));
uCpuID := 0;
bException := true;
try
asm
mov eax, 1
cpuid
{ mov dword ptr szCpu[0], ebx
mov dword ptr szCpu[4], edx
mov dword ptr szCpu[8], ecx
mov eax, 1
cpuid }
mov uCpuID, ecx
end;
except
bException := false;
end;
if bException then
Result := uCpuID;
end;
function GetCpuName(): string;
var
bException: BOOL;
szCpu: array [0 .. 15] of BYTE;
// uCpuID: UINT;
begin
Result := '';
ZeroMemory(@szCpu, sizeof(szCpu));
// uCpuID := 0;
bException := true;
try
asm
mov eax, 0
//cpuid
db 0fh,0a2h
mov dword ptr szCpu[0], ebx
mov dword ptr szCpu[4], edx
mov dword ptr szCpu[8], ecx
// mov eax, 1
// cpuid
// mov uCpuID, edx
end;
except
bException := false;
end;
if bException then
begin
Result := StrPas(PAnsiChar(@szCpu));
end;
end;
function RdRand_isSupported: boolean;
var info: dword;
ss: string;
begin
ss:= GetCpuName;
if pos('Intel',ss)=0 then
begin
result:= false;
exit;
end;
info:= GetCpuId;
// showmessage(INTTOSTR(info));
if info and $40000000=$40000000 then
result:= true
else
result:= false;
end;
function rdrand_16: dword; //取得一个16位的随机数
asm
db $0f, $c7, $f0
end;
关于真随机数和伪随机数的区别,以及世上是否存在真随机数等哲学争论不在本文讨论范围。
下面给出delphi代码,一共4个函数,具体使用的是两个函数:
RdRand_isSupported 判断当前cpu是否支持该功能,
rdrand_16 取得16位随机数到aex寄存器,如果要取32位或者64位的随机数,请自行参考intel开发手册修改相应的指令。另外该函数内没有判断cpu是否支持该指令,所以请在程序开始阶段或者其他相应地方调用RdRand_isSupported来判断cpu是否支持该功能。
function GetCpuId(): UINT;
var
bException: BOOL;
//szCpu: array [0 .. 15] of BYTE;
uCpuID: UINT;
begin
Result := 0;
// ZeroMemory(@szCpu, sizeof(szCpu));
uCpuID := 0;
bException := true;
try
asm
mov eax, 1
cpuid
{ mov dword ptr szCpu[0], ebx
mov dword ptr szCpu[4], edx
mov dword ptr szCpu[8], ecx
mov eax, 1
cpuid }
mov uCpuID, ecx
end;
except
bException := false;
end;
if bException then
Result := uCpuID;
end;
function GetCpuName(): string;
var
bException: BOOL;
szCpu: array [0 .. 15] of BYTE;
// uCpuID: UINT;
begin
Result := '';
ZeroMemory(@szCpu, sizeof(szCpu));
// uCpuID := 0;
bException := true;
try
asm
mov eax, 0
//cpuid
db 0fh,0a2h
mov dword ptr szCpu[0], ebx
mov dword ptr szCpu[4], edx
mov dword ptr szCpu[8], ecx
// mov eax, 1
// cpuid
// mov uCpuID, edx
end;
except
bException := false;
end;
if bException then
begin
Result := StrPas(PAnsiChar(@szCpu));
end;
end;
function RdRand_isSupported: boolean;
var info: dword;
ss: string;
begin
ss:= GetCpuName;
if pos('Intel',ss)=0 then
begin
result:= false;
exit;
end;
info:= GetCpuId;
// showmessage(INTTOSTR(info));
if info and $40000000=$40000000 then
result:= true
else
result:= false;
end;
function rdrand_16: dword; //取得一个16位的随机数
asm
db $0f, $c7, $f0
end;
相关文章推荐
- .NET平台下基于webservice,通过获取硬件cpu序列号和随机字符串序列号实现软件加密的一种方法。
- 看编号识硬件轻松辨识Intel系列CPU
- 获得计算CPU,网卡硬件地址,获取硬盘ID
- C# 获取计算机的硬件信息的方法
- 【硬件】HP fundamental---Intel CPU 命名规则
- 最全的获取苹果机器硬件类型的方法
- Intel提供的获取某台机器CPU数量的源代码
- ASP获取客户端硬件信息(CPU、硬盘、主板、mac地址等)
- asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
- .Net 中获取磁盘序列号和CPU序列号的方法
- .net获取硬件信息_CPU序列号
- 获取系统时间几种方法 和 使用CPU时间戳进行高精度计时
- intel最新cpu型号(硬件)(过期消息)
- C#获取网卡,CPU,硬盘ID的方法
- C#获取CPU网卡等硬件信息
- javascript获取不重复的随机数的方法比较
- C#获取网卡,CPU,硬盘ID的方法
- 获取网卡、硬盘、CPU硬件信息
- 获取系统时间几种方法 和 使用CPU时间戳进行高精度计时收藏
- .net获取硬件信息_CPU序列号