You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCryptodome的RSA.generate传入自定义随机数失效问题咨询

问题原因
  • RSA.generate()的第二个入参要求为可调用对象:该对象需要接收一个整数参数(表示所需随机字节的长度),调用后返回对应长度的随机字节数据。
  • 你使用的v1.read()写法是直接执行了read方法,返回的是提前生成的rngbuff字节串,不是可调用对象,完全不符合参数要求,因此运行失败。
  • 即使你去掉括号改为传入v1.read,当前定义的read方法没有设计接收长度参数,RSA.generate内部调用时传入长度参数会触发参数数量不匹配的报错。
解决方法

首先调整trng类的read方法,使其适配参数要求,支持按请求长度返回随机数据:

class trng:
   def __init__(self, rngval): 
      self.rngval = rngval 
      self.read_offset = 0 # 新增偏移量标记当前读取位置
   def read(self, n): # 新增参数n接收要求的随机字节长度
      # 按请求长度返回对应片段,你也可以根据需求自定义不够长时的补充逻辑
      result = self.rngval[self.read_offset : self.read_offset + n]
      self.read_offset += n
      return result
   def readstd(self):
      return Random.get_random_bytes

修改后调用时传入read方法本身,不要加括号执行即可:

key3 = RSA.generate(1024, v1.read)

注意事项

提前生成的随机数缓冲区长度需要足够支撑RSA密钥生成的消耗,1024位RSA密钥生成通常需要数百字节随机数,你当前生成的1024字节缓冲区可以满足需求,如果使用更长的密钥位数,建议对应扩大缓冲区长度,或者在read方法中补充随机数不足时的兜底生成逻辑。

内容的提问来源于stack exchange,提问作者Mats Stenfeldt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:06:02