Go math/rand和crypto/rand包

摘要:Go语言生成随机数

go生成随机数_study_in的博客-CSDN博客_go 随机数用习惯了python里面的random模块,随机数真的是顺手就来,这次用到了go,没想到生成的居然是伪随机数,首次生成虽然随机了,但是再次生成就一直是这个,这怎么搞,完全没随机啊,下面说一说踩过的坑!!!文章目录1. 首先来说一下什么是随机数2. go中生成随机数的有两个包,分别是“math/rand”和“crypto/rand”,3. 随机数生成4. 初始化随机种子函数(下面为官方文档说明)5...https://blog.csdn.net/study_in/article/details/102919019

示例:

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().Unix()) // 设置随机数种子
	for i := 0; i < 5; i++ {
		r := rand.Intn(100) // 生成100以内随机数
		fmt.Println(r)
	}

	fmt.Println("-------")
	r2 := rand.Int31n(100) // 生成int32类型100以内随机数
	fmt.Println(r2)

	fmt.Println("-------")
	r3 := rand.Int31() // 生成int32类型2的32次方以内随机数
	fmt.Println(r3)     
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用crypto实现Diffie-Hellman算法的示例代码: ```go package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" "math/big" ) func main() { // 生成随机数作为私钥 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } // 获取公钥 publicKey := &privateKey.PublicKey // 生成 Diffie-Hellman 参数 p, err := rand.Prime(rand.Reader, 256) if err != nil { panic(err) } g := big.NewInt(2) // 计算 A = g^a mod p a, err := rand.Int(rand.Reader, p) if err != nil { panic(err) } A := new(big.Int).Exp(g, a, p) // 计算 B = g^b mod p b, err := rand.Int(rand.Reader, p) if err != nil { panic(err) } B := new(big.Int).Exp(g, b, p) // 计算共享密钥 s1 := new(big.Int).Exp(B, a, p) s2 := new(big.Int).Exp(A, b, p) if s1.Cmp(s2) != 0 { panic("共享密钥计算错误") } sharedKey := sha256.Sum256(s1.Bytes()) fmt.Printf("公钥:%x\n", publicKey) fmt.Printf("私钥:%x\n", privateKey) fmt.Printf("参数 p:%x\n", p) fmt.Printf("参数 g:%x\n", g) fmt.Printf("A:%x\n", A) fmt.Printf("B:%x\n", B) fmt.Printf("共享密钥:%x\n", sharedKey) } ``` 上述代码,首先生成了一个2048位的RSA私钥,然后生成了 Diffie-Hellman 的参数 p 和 g,并计算出 A 和 B。最后计算出共享密钥,并使用 SHA256 计算其哈希值作为最终结果输出。 需要注意的是,这里的 Diffie-Hellman 参数 p 是一个256位的素数,可以根据实际需要调整。另外,为了保证安全性,应该使用真正的随机数生成器来生成随机数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值