从关于Quuid的Qt5参考中:
QUuid QUuid :: createUuid()[静态]
在Windows以外的任何平台上,此函数都会返回一个新的UUID,其变体为QUuid :: DCE,版本为QUuid :: Random。如果存在/ dev / urandom设备,则用于构造UUID的数字将具有加密质量,这将使UUID唯一。否则,将从本地伪随机数生成器(qrand(),由qsrand()播种)获得UUID的数字,该数字通常不具有加密质量,这意味着不能保证UUID独一无二。
当在具有/ dev / urandom的平台上时,如何确定/ dev / urandom实际上是否可用并且在运行时会被该函数使用?
我怀疑这不是我的情况,基于我出于好奇心而运行的这段小代码:
while(true){
QUuid u=QUuid::createUuid();
QString str=u.toString();
if(str.contains("2222")){
qDebug()<<"UUID:"<<str;
return;
}
}
当我反复运行它时,将产生以下输出:
1 UUID: "{8b42222b-bac3-4c93-b55d-0255a33115a2}"
2 UUID: "{5122227e-473e-4885-8285-8780cc51f71a}"
3 UUID: "{bfeed28f-f8da-4a69-9303-77388752222e}"
4 UUID: "{0000beee-690c-4875-9589-9e222222cedc}"
5 UUID: "{e5a2646d-1c81-4974-94ad-8b222265b67a}"
6 UUID: "{bb77d756-6726-4e9f-94d8-3d4892222a2f}"
注意第4行的输出看起来很奇怪,在第3列和第4列中还有其他明显的对称性(除了第3列开头的4以外)。
谢谢!
您在第4行的输出几乎可以肯定只是随机机会。6 UUID数量不足,无法提供任何随机性指示,如果您确实想确定的话,则需要测试大量UUID(实际上不可行)。
关于第3列和第4列,您已经注意到,第3列的前导“ 4”是预期的,因为它表示UUID版本。在第4列中的领导值(b 55D,8 285 9 303,...),虽然也预计,该值将永远是8,9,A,或b。在这些值之外,在第三和第四列中没有看到任何特定的对称性。
因为,如果检查/dev/urandom
或qrand()
使用时,QUuid类不提供这方面的信息,但如果你真的想知道你总是可以做QUuid类做什么,并尝试从打开和读取数据/dev/urandom
。我认为这可能是过大的。虽然我当然不会qrand()
在需要质量随机数的任何情况下依赖安全性,但是它的实现(考虑到它是如何播种的,〜行959)可能足以生成UUID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句