如何产生一有规律的30bit的随机数

zealane 2012-06-28 11:09:11
我这个30bit数是随机数,每次不相同,但我想通过这个随机数能区别出与固有30bit的数不同。如何按照某种规律来产生这个随机数。而这个规律一般人不会看的出来。
...全文
187 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zealane 2012-06-28
  • 打赏
  • 举报
回复
这就不是随机数了,老兄
赵4老师 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
请问楼上,这组随机数有什么规律?
[/Quote]

srand(time(NULL));
改为
srand(1);
就有规律了。

赵4老师 2012-06-28
  • 打赏
  • 举报
回复
参考MD5,LHA
zealane 2012-06-28
  • 打赏
  • 举报
回复
可以理解为加密,关键是我如何知道这个随机数是我自己产生的,而不是别人产生的。
比如说我要随机生成一个序列号,而这个序列号我从成千上万个序列号中判别得出是我产生的?
[Quote=引用 1 楼 的回复:]

引用楼主 的回复:
我这个30bit数是随机数,每次不相同,但我想通过这个随机数能区别出与固有30bit的数不同。如何按照某种规律来产生这个随机数。而这个规律一般人不会看的出来。

我擦 你意思不就是加密吗
[/Quote]
zealane 2012-06-28
  • 打赏
  • 举报
回复
请问楼上,这组随机数有什么规律?
赵4老师 2012-06-28
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long ulrand(void) {
return (
(((unsigned long)rand()<<24)&0xFF000000ul)
|(((unsigned long)rand()<<12)&0x00FFF000ul)
|(((unsigned long)rand() )&0x00000FFFul));
}
int i;
unsigned long ul;
void main() {
srand(time(NULL));
for (i=0;i<10;i++) {
ul=ulrand();
printf("%010lu 0x%08x\n",ul,ul);
}
}
//2337588057 0x8b54c359
//1977377429 0x75dc6295
//3607316769 0xd7034921
//0009828482 0x0095f882
//3350859779 0xc7ba1003
//0945794621 0x385fae3d
//3400869024 0xcab524a0
//3097846779 0xb8a563fb
//4287421124 0xff8cdac4
//3934016258 0xea7c5302
帅得不敢出门 2012-06-28
  • 打赏
  • 举报
回复
原随机数-----处理---- 特定规律的数

只要你的原随机数是私有的,不可见,是很难能看出这个规律的。

比如 位反转

如果原随机数是可见的,那就复杂点,可采用md5对数据加密后再做个转换变为30bit数

Athenacle_ 2012-06-28
  • 打赏
  • 举报
回复
什么叫 固有30bit的数?
rand呗,自己凑成30位
N0bug 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我这个30bit数是随机数,每次不相同,但我想通过这个随机数能区别出与固有30bit的数不同。如何按照某种规律来产生这个随机数。而这个规律一般人不会看的出来。
[/Quote]
我擦 你意思不就是加密吗
nice_cxf 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

哦,不能让别人看出来。。。。。要鱼龙混杂,呵呵。
如果加编号就固定了,别人一下子就看出来了。
[/Quote]
还不想让别人看出来有可能么?30位按4字节好了
假定两个人一个用0x33开头表示,一个用0x44结尾表示,那么0x33334444这个数据是谁发的呢?
zealane 2012-06-28
  • 打赏
  • 举报
回复
哦,不能让别人看出来。。。。。要鱼龙混杂,呵呵。
如果加编号就固定了,别人一下子就看出来了。
nice_cxf 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

楼上别冲动。
我是提出需求的,可能我说的不是很清楚。
解释见6楼。

这个可以解释为部分随机,部分自定义。
做个标签,表明是自己的。
[/Quote]
如你所说还有别人的,你怎么保证和别人的不冲突?当然如果所有人都用相同的位做标记并且在人数范围内当然可以,不就是30位中前几位是编号,后面才是数据么?不过这样有必要问么?
zealane 2012-06-28
  • 打赏
  • 举报
回复
楼上别冲动。
我是提出需求的,可能我说的不是很清楚。
解释见6楼。

这个可以解释为部分随机,部分自定义。
做个标签,表明是自己的。

nice_cxf 2012-06-28
  • 打赏
  • 举报
回复
概念都搞不清楚就发帖子
还能知道是你产生的,还有人给算法。。。
如果我做一个从0-2^30循环的随机数,是不是中间的一部分就变成是你产生的?
zealane 2012-06-28
  • 打赏
  • 举报
回复
楼上的意思是随机取md5中的30位,然后验证的时候,看是否是md5的子集?
  • 打赏
  • 举报
回复
有个简单的办法
自己定义源数据 -> md5 取 其中的 30位。
验证的时候走一边自己的源数据md5 就知道是不是自己产生的了
N0bug 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
这就不是随机数了,老兄
[/Quote]
随机数你怎能有规律

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧