Golang中mac地址+时间戳加入rand.Seed()产生随机数

记录一下用mac地址+local时间作为seed来产生随机数

// 首先记录一下rand.Seed()怎么用
// 官方说明,传入int64数据为Seed
func (r *Rand) Seed(seed int64)
// Seed uses the provided seed value to initialize the generator to a deterministic state.
// Seed使用提供的seed值将发生器初始化为确定性状态。
导致每次rand出来的都是一样的,所以至少我要加入时间戳为随机数种子
// 获取时间戳函数使用示例
t1 := time.Now().Unix()            // 单位s,打印结果:1491888244
t2 := time.Now().UnixNano()       // 单位纳秒,打印结果:

// output 精度的差别
1491888244752784461
type:int64

完整代码:

package main

import (
    "fmt"
    "net"
    "time"
    "hash/fnv"
)

/* 加密 encryption */
// net 
func GetMacAddrs()(string,error){
      netInterfaces, err := net.Interfaces()
      if err != nil {
          return "",err
      }

     for _, netInterface := range netInterfaces {
          macAddr := netInterface.HardwareAddr.String()
              if len(macAddr) == 0 {
              continue
          }
         return macAddr,nil
      }
     return "",err
}

// hash output uint32
func Hash(s string) uint32{
        h := fnv.New32a()
        h.Write([]byte(s))
        return h.Sum32()
}

// add mac and time.now() as seed
func Hashseed() int64{
        mac_adr, _ := GetMacAddrs()
        t := time.Now().UnixNano() // int64
        return int64(Hash(fmt.Sprintf("%d %s",t,mac_adr)))
}

func main(){
   
      rand.Seed(Hashseed())
      rnd := make([]byte,4)
      binary.LittleEndian.PutUint32(rnd, rand.Uint32())
       fmt.Println(rnd)

}

 

转载于:https://www.cnblogs.com/kumata/p/10157409.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值