Random随机数总结

random.nextInt(10);//0-9之间int型伪随机数
random.nextDouble();//0.0-1.0之间的double型伪随机数
random.nextDouble()*100;//0.0-100.0之间的double型伪随机数
//字符串转化为小写str.toLowerCase()
//字符串转化为大写str.toUpperCase()

 

public static void main(String[] args)
 {
  String randomNum = myRandom(5);
  System.out.println(randomNum);
  Scanner input = new Scanner(System.in);
  System.out.print("请输入验证码:");
  String inputStr = input.next();
  while(!isEqual(inputStr,randomNum))
  {
   System.out.print("验证码不正确,请重新输入:");
   inputStr = input.next();
  }
  System.out.println("输入正确,进入!");
 }
 /**
  * 获取n位数字验证码
  * @param n
  * @return String
  */
 private static String myRandomNum(int n)
 {
  StringBuffer sb = new StringBuffer();
  for(int i = 0 ; i < n ;  i++)
  {
   Random random = new Random();
   int randomNum = random.nextInt(10);
   sb.append(randomNum);
  }
  return sb.toString();
 }
 
 /**
  * 获取n位数字字母组合的验证码
  * @param n
  * @return String
  */
 private static String myRandom(int n)
 {
  StringBuffer sb = new StringBuffer();
  String base="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  //System.out.println(base.length());
  for(int i = 0 ; i < n ;  i++)
  {
   Random random = new Random();
   int randomNo = random.nextInt(base.length());
   char randomNum = base.charAt(randomNo);
   sb.append(randomNum);
  }
  return sb.toString();
 }
 
 /**
  * 判断两字符串是否相等(忽略大小写)
  */
 private static boolean isEqual(String str1,String str2)
 {
  boolean b = false;
  //都转化为小写,再比较
  str1 = str1.toLowerCase();
  str2 = str2.toLowerCase();
  
//  //都转化为大写,再比较
//  str1 = str1.toUpperCase();
//  str2 = str2.toUpperCase();
  if(str1.equals(str2))
  {
   b = true;
  }
  return b;
 }

在 Python 中,`random` 模块提供了生成随机数的功能。然而,当涉及到安全相关的场景(如密码学、会话管理等),普通的 `random` 模块可能不够安全,因此需要使用更安全的随机数生成方法。 Python 提供了 `secrets` 模块,专门用于生成安全性更高的随机数。以下是关于如何使用 `secrets` 模块生成安全随机数的详细说明和代码示例。 --- ### 1. 生成安全随机整数 ```python import secrets # 生成一个范围内的安全随机整数 secure_random_int = secrets.randbelow(100) # 生成 [0, 100) 范围内的随机整数 print(f"Secure random integer: {secure_random_int}") ``` **解释**: `secrets.randbelow(n)` 函数生成一个范围在 `[0, n)` 内的安全随机整数。与 `random.randint` 不同,`secrets.randbelow` 更适合用于安全敏感的场景。 --- ### 2. 生成安全随机比特串 ```python import secrets # 生成一个指定长度的随机比特串 secure_random_bits = secrets.randbits(16) # 生成 16 位的随机整数 print(f"Secure random bits (16-bit integer): {secure_random_bits}") ``` **解释**: `secrets.randbits(k)` 函数生成一个 k 位长的随机整数。例如,`secrets.randbits(16)` 会生成一个介于 0 和 65535 之间的随机整数。 --- ### 3. 从序列中选择安全随机元素 ```python import secrets # 从列表中选择一个安全随机元素 choices = ['a', 'b', 'c', 'd'] secure_choice = secrets.choice(choices) print(f"Secure random choice: {secure_choice}") ``` **解释**: `secrets.choice(seq)` 函数从给定的序列中选择一个元素。与 `random.choice` 不同,`secrets.choice` 使用了更安全的随机数生成器。 --- ### 4. 生成安全随机令牌 ```python import secrets # 生成一个 URL 安全的随机令牌 secure_token_urlsafe = secrets.token_urlsafe(16) # 生成一个 16 字节的 URL 安全令牌 print(f"Secure URL-safe token: {secure_token_urlsafe}") # 生成一个十六进制格式的随机令牌 secure_token_hex = secrets.token_hex(16) # 生成一个 16 字节的十六进制令牌 print(f"Secure hexadecimal token: {secure_token_hex}") # 生成一个字节格式的随机令牌 secure_token_bytes = secrets.token_bytes(16) # 生成一个 16 字节的字节令牌 print(f"Secure byte token: {secure_token_bytes}") ``` **解释**: - `secrets.token_urlsafe(nbytes)` 返回一个 URL 安全的字符串,适合用作临时令牌。 - `secrets.token_hex(nbytes)` 返回一个十六进制格式的字符串,适合用于加密密钥或哈希值。 - `secrets.token_bytes(nbytes)` 返回一个字节对象,适合直接用于二进制数据处理。 --- ### 5. 比较普通随机数和安全随机数 ```python import random import secrets # 普通随机数 normal_random_int = random.randint(0, 99) print(f"Normal random integer: {normal_random_int}") # 安全随机数 secure_random_int = secrets.randbelow(100) print(f"Secure random integer: {secure_random_int}") ``` **解释**: - `random.randint(a, b)` 是基于伪随机数生成器的,容易被预测,不适合用于安全场景。 - `secrets.randbelow(n)` 使用操作系统提供的随机源,更难被预测,适用于安全场景。 --- ### 总结 上述代码展示了如何使用 Python 的 `secrets` 模块生成安全随机数。相比于 `random` 模块,`secrets` 模块更适合用于密码学、会话管理等安全敏感的应用场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值